Would you like to remove the book mark or change the title for this page?
<Untitled>
AddBookMark
nomark
bookmarks
Please enter the reference information for the book mark
bookMarks
bookmarks
refInfo
Book Marks in this book have become corrupted. They are being removed
BookMark
w, "X
,&H.&
V, #>
.', "
removeBookMark
tmplttool
!MpopMenu
bookmarks
gotoBookMark
TutorialList
ChangeTutorial
Notepad
Notepad
popHelp
false
popupHelp
popupHelp
updateDisplay
reader
background
popHelpText
statusText
s_TargetWindow
popHelp
showText
statusBar
mouseEnter
lscreenFromPage
popHelp
pophelpText
PopHelp
popText
s_targetWindow
pophelp
PupDateDisplay
showText
PopText
showText
popText
mouseLeave
.'+ +F
PupdateDisplay
enterPage
leavePage
reader
e+lockedInPlace
moved
5(gettickCount
5(getTickCount
littlePause
popupText
[[popText
{popTitle
buttonClick
7))')16+7:
tabPressed
tabname
J,tabMode
obtype
tabNum
buttonClick
etabLimit
Cannot set tab
tabPressed
myTabMode
tabMode
tabLimit
myTabMode
tabMode
myTabHeight
tabHeight
myTabHeight
tabHeight
arrangeTabs
myTabSpace
tabSpace
myTabSpace
tabSpace
w, #?
manual
false
myNumTabs
etabLimit
Can only have
Must have at least 1 tab
arrangeTabs
numTabs
myNumtabs
numTabs
manual
tabRef
tabLabel
tabHighlight
tabHeight
arrangeTabs
myNumTabs
obtype
highlight
myTabHeight
sized
w, #>
myTabMode
tname
myNumTabs
myTabSpace
anchor
arrangeTabs
buttonClick
nthe
"Message"
670,2427
littlePause
"Button Script"
?Forward" =
2065, 1572
3970, 2172
"Background
5770, 1677
"Book
animateDown
>= orgPos
H0,50
openandCloseDoors
animateUp
H0,-50
notifyBefore
}= orgpos
>/10)
>= (
>= (
>= (
>= (
selectChange newDrive
checkLinks
= TRUE
drive =
setCurrentDrive(
setCurrentDirectory(
;&":")
updateDirectoryInfo
Y&":.\"
updateFileInfo
s&":.\"
selectFile
&":.\"
= FALSE
uncheckLinks
enterDropdown
odropDownItems
getDriveList()
notifyBefore
ZSTRING fileList
linkDLL systoolBookDirectory & "tb40dos.dll"
bgetCurrentDrive()
INT
unlinkDLL
try & "
notifyAfter
--stub
prevent
& handlers
message exist
pathAndFile
checkLinks
drive = getCurrentDrive()
setCurrentDirectory(
.&":.\"&
path = getCurrentDirectory(
updateFileInfo
l&":.\"
selectFile
&":.\"
updateDirectoryInfo
&":.\"
oselectedTextlines
qrefCount
DLLs requires leaving clean
uncheckLinks
notifyBefore
ZSTRING fileList
= getDirectoryOnlyList(
&"*", "N")
B = "."&CRLF&".."
linkDLL systoolBookDirectory & "tb40dos.dll"
INT
unlinkDLL
pry & "
notifyAfter
--stub
prevent
no notifyhandlers
message exist
pathAndFile
keep
causing ES
-- This message
sent
clicked
changed
Hsetting
-- tabMode.
Put code
handler,
-- on
tabPressed tabNum
-- handles clicking on
buttonClick
-- test
9was
Hchecking "obtype" userProperty
-- each
named "
", N being
tabname
-- Changes which
9folder
front.
It does
Hmoving
U"mask"
-- Value
zbetween 1
tabs
value
< 1
> tabLimit()
"Cannot
9" &&
-- moves
visually
-- appear
See sized
below
adiagram
v + xpix(),
-- stores
a userproperty
myTabMode
-- sends
notification
-- The handlers
resizing
,mode. --
-- Used
%a constant.
Returns
-- Note:
you wish
more
, follow
procedure:
-- Go
duplicate one
-- Rename that
9appropriately. (
instance would
-- be
Tab7",
thirteenth
# be "Tab13").
-- Set its
behind
function
reflect
pageUnits given n
pixels.
xPix n
sysPageUnitsPerPixel * n
yPix n
Tel * n
-- returns
currently selected
-- sets up
height
units.
tabHeight
myTabHeight
handled
tabSpace
myTabSpace
arrangeTabs
numTabs
valid parameter
"Must have
)least 1
"Can only
/" &&
&& "
-- cache
{reference
optimization.
9"&i)
i <=
--
hidden
%they've
xbeen
-- receiving them
# are
"manual"
myNumTabs
myNumtabs
resized
Notice
-- methodSent:
used
differentiate
=messages
toolBook
explicitly
syssuspendmessages
off toolbooks
messaging,
%we will be changing
stuff.
Without
recursively
-- calls itself over
sysSuspendMessages
thing
has a
called
5,6 _________ 7,8
3,4 |
| 9,10
1,2 |____________| 11,12
-- Here
amap
--
goal here
maintain
shape
--
. (Otherwise
gets
stretchy.) Also,
--
should be
-- find
how tall
supposed
--
tabRef
--
tsection
makes
" corners
--
Need
be sure
--
wide
4doing
m"tabHighlight"
B"tabLabel"
l (),
< ()
--
--
editor.
rectangular
-- body
--
following condition
triggered
%a whole
, even though their sizes
So we must notify
can
themselves.
xarranged
--
9"&i)
-- don't bother arranging
--
x on
-- assures
aligned
spaced evenly.
anchor
"tab1"
where
order
xPos
bp -
b(ts,0)
through remaining
place
--
9"&i)
()+ts
--
-- now
tbit
masking
others.
bchecks
x(e.g.,
just
moved
tname
9" &
above
-- This message
sent
clicked
changed
Hsetting
-- tabMode.
Put code
handler,
-- on
tabPressed tabNum
-- handles clicking on
buttonClick
-- test
9was
Hchecking "obtype" userProperty
-- each
named "
", N being
tabname
-- Changes which
9folder
front.
It does
Hmoving
U"mask"
-- Value
zbetween 1
tabs
value
< 1
> tabLimit()
"Cannot
9" &&
-- moves
visually
-- appear
See sized
below
adiagram
v + xpix(),
-- stores
a userproperty
myTabMode
-- sends
notification
-- The handlers
resizing
,mode. --
-- Used
%a constant.
Returns
-- Note:
you wish
more
, follow
procedure:
-- Go
duplicate one
-- Rename that
9appropriately. (
instance would
-- be
Tab7",
thirteenth
# be "Tab13").
-- Set its
behind
function
reflect
pageUnits given n
pixels.
xPix n
sysPageUnitsPerPixel * n
yPix n
Tel * n
-- returns
currently selected
-- sets up
height
units.
tabHeight
myTabHeight
handled
tabSpace
myTabSpace
arrangeTabs
numTabs
valid parameter
"Must have
)least 1
"Can only
/" &&
&& "
-- cache
{reference
optimization.
9"&i)
i <=
--
hidden
%they've
xbeen
-- receiving them
# are
"manual"
myNumTabs
myNumtabs
resized
Notice
-- methodSent:
used
differentiate
=messages
toolBook
explicitly
syssuspendmessages
off toolbooks
messaging,
%we will be changing
stuff.
Without
recursively
-- calls itself over
sysSuspendMessages
thing
has a
called
5,6 _________ 7,8
3,4 |
| 9,10
1,2 |____________| 11,12
-- Here
amap
--
goal here
maintain
shape
--
. (Otherwise
gets
stretchy.) Also,
--
should be
-- find
how tall
supposed
--
tabRef
--
tsection
makes
" corners
--
Need
be sure
--
wide
4doing
m"tabHighlight"
B"tabLabel"
l (),
< ()
--
--
editor.
rectangular
-- body
--
following condition
triggered
%a whole
, even though their sizes
So we must notify
can
themselves.
xarranged
--
9"&i)
-- don't bother arranging
--
x on
-- assures
aligned
spaced evenly.
anchor
"tab1"
where
order
xPos
bp -
b(ts,0)
through remaining
place
--
9"&i)
()+ts
--
-- now
tbit
masking
others.
bchecks
x(e.g.,
just
moved
tname
9" &
above
--Intilization handlers
the startup up
enterApplication
4popHelp
popupHelp
initialize
TutorialtoolBar
statusControls
autoSize
maximumSize
`= 640,480
sizetoPage
Added 5/13 Rob
|= TRUE
sysReaderRightClick =
systoolBookDirectory&"tb40win.dll"
STRING getIniVar(
setIniVar(String,
INT popMenu(WORD,
Text(
~screenFromPage(
clientFromPage(
ScreenFromClient(
xUnitsFromPixels(
yUnitsFromPixels(
linkdLL "user"
LockWindowUpdate(
getDesktopWindow()
flashWindow(
DWORD GetTickCount()
path
8<> "\"
autosize
--Handlers
Items
enterMenu menuName, menuAlias
normalGraphic
B"AddBookMark"
"tmplttool"= icon "mark"
setMenuItemName("
9, "Remove
menuItemChecked(
cView
close
updateDisplay
"Tmplttool"
postit
J"Postit1" = ""
"postit1"
/= 1440,1440
J"Postit2" = ""
"postit2"
/= 1540,1540
J"Postit3" = ""
"postit3"
/= 1640,1640
J"Postit4" = ""
"postit4"
/= 1740,1740
Request "Sorry only four
notes per
bookMarks
_Would you like
change
title
"Change"
"Cancel"
answer =
(bookmarks
foundRef = i
("Please
reference information
refInfo
"<Untitled>"
8&","&
nomark"
8have become corrupted.
They are being removed"
&","&
JTextLine
&","&
gotoBookMark
Zlv_menuItems, lv_position
lv_Position
B"removeBookMark"
)&","&
/ 2)
lv_MenuItems =
popText("","There
Q windowHandle
J",pageScroll
ChangeTutorial
xisOpen
"TutorialList"
%modal
Notepad
--Other
--Traps The message so no error Occurs
there
Status bar control
pophelp.
4s_TargetWindow
4logical
ZoldCursor
statusBar = "
obj =
cstatusText
<> "
popHelpText
s_targetWindow =
showText
"PopHelp"
pophelpText
%notActive
upDateDisplay
parentWindow
xPos = (
>/2))
yPos = (
"PopText"=
b&","&
Viewer "
--Updated
JButtons.
J" =
--Keep
Haccident
lockedInPlace
--This creates a friendly
useful
making automatic sequences.
littlePause
ZstartTime
= getTickCount()
cgettickCount() -
0 < 400
mmYield
's up
E assigned
buttonClick
c(popupText
NULL
popTitle
#, mousePosition
%5&&&&%%&&
optimize
optimized
wrap right
Nothing
scroll down
set scroll
scroll up
content text
buttonClick
buttonStillDown
content text
enterPage
content text
reader
buttonClick
textOverFlow
J"content
" = 0
enabled
" + 1
B"up"
notifyAfter
" = 0
" = 0
leavePage
reader
notifyAfter
) = 0
notifyBefore
) = 0
content text
buttonClick
buttonStillDown
content text
enterPage
content text
reader
buttonClick
J"content
" <> 0
" - 1
enabled
B"down"
textUnderFlow
" = 0
notifyBefore
" = 0
" = 0
1440,-22846
info_LastSavedBy
<BookPath>
:HDMEDIAPATH
Arial
Arial
D:\MTB40\TIPS\WIP\D
MTBWidgets
mes New Roman
Times New Roman
mes New Roman
System
Arial
Arial
Arial
Arial
D:\MTB40\TIPS\WIP\
Arial
D:\SAMPAPPS\D
Arial
` mes New Roman
autoSaveAutomatic
Arial
info_LastSaved
Arial
5/31/95 3:08:11 PM
mes New Roman
<Untitled>,Page id 51
<Untitled>,page id 33
<Untitled>,Page id 22
Arial
Arial
3%o5p
Arial
3%o5p
arial
Times New Roman
Arial
MS Sans Serif
mes New Roman
Arial
TBKWidgets
purpose
<Untitled>,Page id 51
bookmarks
BridieS
mes New Roman
Times New Roman
mes New Roman
System
Arial
Courier New
ToolBook Design
page 1
Page "TmpltTool"
ButtonDoubleClick
ButtonDoubleClick
isOpen
Viewer "Tool"
tile
captionBar
defaulttype
V = "child"
= thin
= popup
TutorialList
Select Tutorial To View
Page "TutorialList"
Notepad
Note Pad
Page "Notepad"
poptext
Page "popHelp"
Example
e Right Way
Page "badPage"
e Wrong Way
The Efficient Way
ButtonDoubleClick
ButtonDoubleClick
isOpen
Viewer "
tile
J" =
J" =
captionBar
J" =
defaulttype
J" = "child"
J" =
J" = thin
J" = popup
10,14
selectChars
1728,-22336
Postit4
1640,-22424
Postit3
1440,29490
Postit1
1540,-22524
Postit2
ASYM_BeenHere
title
ToolBook Application Design
selfRef
enterpage
notifyBefore
selfRef
Learn how to build an application from the ground up. The ToolBook Design Help Book takes you through some ToolBook basics so you can make more informed decisions as you begin your development effort. You'll find information on ToolBook's internal structure, content development, code design, and how to target your application for your intended audience...ence.ience.ach your intended audience........
enterpage
1728,-22480
950509195345385869048971625
ASYM_TpID
ToolBook Design
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
585,90
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
520,55
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
800,140
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
915,105
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
UpdateDisplay
EnterPage
Table of Contents
.'+ +F
Hotword
buttonClick
buttonClick
1728,18704
Postit4
1640,18616
Postit3
1440,-11446
Postit1
1540,18516
Postit2
ASYM_BeenHere
Section List
What is ToolBook?
Messages
Working with keyboard messages
The object hierarchy
Objects and boundaries
n ToolBook
Section List
Displaying objects on the screen
Managing palettesssaging palettestion..n.
Section List
Guidelines
Books, backgrounds, and pages
Viewers
Visual v. programmatic design
Section List
ToolBook properties
System properties
Object properties
User properties
Section List
Getting started.
Section List
ToolBook draw objects
Section List
Taking advantage of the object hierarchy
Section List
Properties.
Section List
OpenScript code design.
Section List
What are DLLs?
When to use DLLsssss.
Section List
Using DLLs
Section List
Who is your target audience?
What is the target machine?
What's next???then program
What's next??
Section List
Before you begin authoring.
Section List
Rules of thumb
Designing for efficiency
Parameters and system variables
Object references
Shared scripts
AutoScript (ATS)
1728,18560
950509195345385869048971625
ASYM_TpID
Table of Contents
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
585,90
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
520,55
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
800,140
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
915,105
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
UpdateDisplay
EnterPage
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
What is ToolBook?
2550,-3217
Postit1
415,-8499
Postit2
5300,-5117
Postit4
2550,-3361
Postit3
What is ToolBook?
title
ASYM_BeenHere
ToolBook is an object-oriented authoring environment for Windows. A ToolBook application is like a book: each screen is made up of a page and its background. A single background contains one or more pages and a single book can contain one or more backgrounds.
The interface of a ToolBook application is composed of objects. Buttons, text fields, and graphics are objects. In addition, pages, backgrounds, the book itself, and the window that displays the application are also objects in the ToolBook system. Understanding the book metaphor and the idea that everything you see in a ToolBook application is an object is the key to becoming a successful ToolBook author.hor.hor.
I am a button, click me with the mouse.
statusText
Button
The book contains all the other objects
statusText
Books contain backgrounds
The background contains pages and objects.
statusText
Objects go on the page.
statusText
popHelpText
Pages contain objects
Backgrounds contain pages as well as other objectsss
415,-5187
1440,-18496
UpdateDisplay
95050919535738599103127501459
ASYM_TpID
Getting started
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
0$B${
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
content text
EnterPage
leavePage
reader
leavePage
enterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
Messages
415,-435
Postit1
2550,1535
Postit3
2550,1391
Postit2
2550,1247
Postit4
Messages
title
ASYM_BeenHere
ToolBook is a Windows application. Like all Windows applications, ToolBook is event-driven. This means that until an event is generated, such as clicking an object or typing at the keyboard, the system is in an idle state. Events that occur in a ToolBook application are represented as messages. When you click the button to the right, a buttonClick message is generated by ToolBook. In ToolBook, you can decide for yourself what will happen when the buttonClick message is sent.
Click the Arrow button.
There are many types of messages and many places you can process them. Later in this tutorial, you will learn how messages are processed or handled by ToolBook, as well as how to work with messages in OpenScript.
To see an object respond to an action, click the button on the right.
popupText
openUp
MessageText
buttonClick
buttonClick
openUp
"MessageText"
oenabled =
MessageText
buttonClick
openUp
leavePage
buttonClick
H137*2
enabled
B"Go" =
openUp
&",0"
H137*2
notifyBefore
This field is displayed when a buttonClick message is sent to the above button.
<click the field to reset the test>>
leavePage
5300,-365
1440,-13546
Messages (cont.)
title
1440,-13246
Postit1
5300,-77
Postit3
415,-147
Postit2
2550,1823
Postit4
ASYM_BeenHere
There are two types of messages generated by a ToolBook application: event messages and notification messages. Event messages are the most common and include mouse events, keyboard events, and enter/leave events. These are all actions that are processed by the ToolBook system. When the mouse is clicked, the mouse event messages (such as buttonDown, buttonUp, and buttonClick) are sent via the object hierarchy from the object that was clicked, to the group that the object is in, to the page, to the background and so on. The messages can be handled by any object in the object hierarchy. Once a messages is handled, it can be forwarded for further processing. Messages that are not forwarded are considered trapped.
Notification messages are not handled by are instead generated by the system and handled by the user.ser. f h
Defines what will happen when an object receives a particular message.
popuptext
Handlers
poptitle
Forward
poptitle
Send a message up ToolBook's object hierarchy.
popuptext
A trapped message does not proceed up the object hierarchy.
popupText
Trapping messages
popTitle
Books contain backgrounds
Background contain Pagess pages as well as other objects
Object
Groups contian objects
Groups contain objects or groups
Pages contain objects or groups
Working with keyboard
Keyboard messages
title
1440,-12346
Postit1
5300,787
Postit3
415,717
Postit2
2550,2687
Postit4
ASYM_BeenHere
Three related keyboard event messages are keyDown, keyChar, and keyUp. These messages (sent in that order) are frequently a source of confusion. ToolBook sends the keyDown and keyUp messages as a result of pressing keys on the keyboard. The keyChar message is sent when a key is pressed that corresponds to a printable character. Therefore many keys, such as the arrow keys and function keys, do not generate a keyChar message. It is very important to forward all of these messages as the examples on this page illustrate. Although all keys generate a keyDown message, many also produce an additional message. For example, the delete key also sends the clear message and the F3 key sends the author/reader message. Trapping any of these messages with a script only traps that message. Other messages generated by that key are still sent.c
Clear message
popTitle
The clear message deletes the current selection. There are two ways to trap the clear message. Either write a handler for clear that you do not forward, or remove the Clear command from the Edit menu at Reader level.
popupText
You can type in this field, but you cannot use the arrow keys or the backspace key because the keyDown
* Notice the delete key works, it sends the clear message.
handler in this field does not have a forward statement in it.
enterPage
keyDown
notifyAfter
= "You can type
, but you cannot use the arrow
backspace key because
" & \
"handler
does
xhave a
statement
." &
"* Notice
zdelete
iworks,
sends
[message."
Forward intentionally
xforwarded.
You can type in this field, but you cannot use the arrow keys or the backspace key because the keyDownhandler in this field does not have a forward statement in it.
* Notice the delete key works, it sends the clear message.ge...e.lear message.
You can't even type in this field because the keyChar handler in this field has not been
forwarded
* Again, the delete key works.
enterPage
keyChar
notifyAfter
= "You can't even type
because the
handler
xbeen " \
& "forwarded" &
"* Again,
Kdelete key works."
-- Forward message intentionally
You can't even type in this field because the keyChar handler in this field has not been forwarded
* Again, the delete key works..eld does not have a forward statement in it.
* Notice the delete key works though, it sends the clear message.
enterPage
The Object Hierarchy
5300,4963
Postit1
415,4893
Postit3
2550,6863
Postit2
2550,6719
Postit4
Object hierarchy
title
ASYM_BeenHere
When a message is sent to an object, it travels up the object hierarchy. The diagram at right shows that ToolBook's object hierarchy can follow several paths. On the next pages we will explore this hierarchy. A message travels up the hierarchy until it locates a handler for itself or until it reaches the ToolBook system.
Note: The object which first receives the message is called the target.h first receives the message is called the target.ed the target.
Background Containing the Page pages as well as other objects
Group
ToolBook System
Group
Viewer
Group
System Books))
1440,-7996
1,20,25,29,33
oldRecordfieldList
95050919535738599103127501459
ASYM_TpID
Getting started
title
1,20,25,29,33
newRecordfieldList
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
V$h${
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
content text
reader
EnterPage
leavePage
leavePage
enterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
UpdateDisplay
The Object Heirarchy
Object hierarchy (cont.)
title
ASYM_BeenHere
If you click an object on the page that does not have a handler for the buttonClick message, the message continues to the page, then to the background, and so on, until it reaches the ToolBook system. ToolBook system.
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
670,2427
littlePause
2065, 1572
3970, 2172
5770, 1677
7195, 1632
Click this button to demonstrate the message flow through a book.
statusText
popHelpText
Show Example
Message
height
Button
Pagenn
Background
ToolBook System
oldRecordfieldList
Getting started
title
950518112726106624541288722
ASYM_TpID
newRecordfieldList
content text
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
EnterPage
UpdateDisplay
Handlers in objects
Title
ASYM_BeenHere
However, if the script of the object contains a handler for the buttonClick message, the object's handler is executed and the message stops.....
Button
button script
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
670,2427
littlePause
Show Example
Button Script
to handle buttonClick
beep 5
Message
height
Handlers in Pages
title
ASYM_BeenHere
If the object does not have a buttonClick handler but the page does, the page's handler is executed and the message stops.ops.
Script
to handle buttonClick
beep 5
Script
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
670,2427
littlePause
2065, 1572
"Script"
Show Example
Message
height
Pagenn
Button
Handlers in backgrounds
title
ASYM_BeenHere
If neither the object nor the page has a buttonClick handler, but the background does, the background handler gets executed and the message stops.ops.
Script
to handle buttonClick
beep 5
Script
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
670,2427
littlePause
2065, 1572
3970, 2172
"Script"
Show Example
Pagenn
Button
Background
Message
height
Objects on the background
title
ASYM_BeenHere
If you click an object located on the background, the object gets the message first. If the object doesn't have a handler for the message, the message passes to the background and so on. on.
Script
to handle buttonClick
beep 5
Script
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
3475,1677
littlePause
"Script"
Show Example
ComboBox
Message
height
Click a page
title
ASYM_BeenHere
If you click the page, but away from any object, the message goes directly to the page.age.
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
2065, 1572
littlePause
3970, 2172
5770, 1677
7195, 1632
Show Example
Pagenn
Background
ToolBook System
Message
height
Objects in groups
title
ASYM_BeenHere
If you click an object in a group, the message goes first to the object, then to the group, then to the parent of the group (in this example, the page), and so on until the message is handled or until it reaches the ToolBook system.tem.
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
1300,2547
littlePause
1570,1617
2065, 1572
3970, 2172
5770, 1677
7195, 1632
title
Show Example
Message
height
Button
Pagenn
Background
ToolBook System
Group
Forwarding messages
title
ASYM_BeenHere
script
littlePause
Message
buttonClick
buttonClick
nthe
"Message"
670,2427
littlePause
2065, 1572
3970, 2172
5770, 1677
7195, 1632
Show Example
Message
height
Button
Pagenn
Background
ToolBook System
Script
to handle buttonClick
beep 5
forward
If a handler contains a forward statement, the message is passed to the next object in the hierarchy. The script in the initial handler will be executed and, when the forward command is executed, the message will continue up the object hierarchy.chy.
0 z ]
More on forwarding
title
ASYM_BeenHere
Objects further up in the hierarchy can handle a forwarded message if the objects have a handler for the message.age.
Book Script
to handle buttonClick
beep 15
endddddd
Show Example
Button
Pagenn
Background
ToolBook System
Script
to handle buttonClick
forward
beep 5
Background Forward
Button Script
to handle buttonClick
beep 5
forward
Button Forward
Message
height
2550,5423
Postit4
415,3453
Postit2
5300,3523
Postit3
1440,-9496
Postit1
Viewers
title
ASYM_BeenHere
You can use a viewer to display a page on the screen. There are two simple rules to remember about viewers:
Viewers do not own
pages.
a page must be shown by
a viewer.
Using the diagram to the right we can follow the path of messages sent to the pageusing the red arrows. Messages do not flow from the page to the viewer, This is because a viewer is a child of the book that shows a page. A viewer is not the parent of a page or background.
Viewers
poptitle
When an object in a viewer is clicked, only the object's parents receive the message. For example, a buttonClick message goes from the object, to the background, then to the book, and finally to the ToolBook system.
popupText
Background Containing the Page pages as well as other objects
ToolBook System
Viewer
Child
Parent
Content
Window
Objects and Boundaries
5300,5395
Postit1
415,5325
Postit3
2550,7295
Postit2
2550,7151
Postit4
Objects and boundaries
title
ASYM_BeenHere
A ToolBook file is composed of 65,536 segments that can be up to 64K each. Of these segments, one is used by the book itself, one by the first background and one by the first page. Each additional background or page takes up another segment. Other things that use segments include scripts larger than 2K, shared scripts and other resources, imported graphics larger than 1K, and viewers.
It is important to know these boundaries before designing your ToolBook application so you can exploit those areas where ToolBook's resources are abundant and be frugal where they are scarce..
Huge Objects
popTitle
Some graphics are so large that they won't fit in a single segment. For these graphics ToolBook contains a special huge segment table. The graphics themselves are stored seperately in the file. A book can contain 8k of these huge graphic objects.
popupText
64K segments in a ToolBook file.
64K of content per segment.
The following each have their own 64K segment: own 64K segment:ield
The following have their own 64K segment
Book
Backgrounds
Page
Shared Scripts
Scripts larger than 2K
Graphics larger than 1K
ToolBook filee
1440,-7546
intro
example
leavePage
isOpen
"example" = TRUE
close
"intro"
"bad"
"good"
Objects and boundaries (cont.)
title
5300,5395
Postit1
415,5325
Postit3
2550,7295
Postit2
2550,7151
Postit4
ToolBook is designed to handle applications with many pages. It is unlikely that you will ever run out of pages in a single ToolBook application. Even a poorly designed application that uses a different background for each page can contain up to 32,000 pages. It is, however, possible to run up against the 64K boundary for page or background content, in which case you will probably get a "Page or Background Full" error. Before you can understand how to avoid this problem, it is best to know what can lead to it.
On the right are tips for avoiding page full errors as well as two different methods that accomplish the same task. Notice the readings for percentFreeSpace.
PercentFreeSpace
popTitle
Page or background property that displays the amount of memory available to the page or background.
popupText
intro
The Inefficient Way
badPage
example
buttonClick
buttonClick
= TRUE
"intro"
isOpen
"example" =
currentPage
"badPage"
I"The Inefficient Way"
"good"
The inefficient way
intro
goodPage1
The Efficient Way
example
buttonClick
buttonClick
= TRUE
"intro"
isOpen
"example" =
currentPage
"goodPage1"
K"The Efficient Way"
"bad"
The efficient way
This example looks identical to the 'Inefficient Way' but is much more efficient, increasing the percentFreeSpace readings for both the page and background significantly
The tab control resides on the background and contains a record field. Selecting a tab now changes pages.
The icon viewer displays a single button. Pressing the arrow buttons changes the normalGraphic of the display button.
The background graphic is now a single button that displays a graphic resource...............................
resource........r polygons.er than 30 irregular polygons.
intro
intro
Create new pages to display new content rather than hiding and showing objects.
Use record fields to display text on multiple pages for efficiency to save space.
Use a single graphic object rather than complex groups with many objects
Use graphic resources whenever possible, setting the graphic of a button rather than importing a graphic. of a button rather than importing a graphic.
Tips to save page and background resources.ces.
This example does several things inefficiently.
The tab control uses a single field that is scrolled up and down when the "a" and "b" tabs are selected. This leads to an excessive amount of text on the page.
The icon viewer hides and shows 10 different bitmap objects. Graphic objects generally require more memory than other objects.
The background graphic is composed of 30 different irregular polygons grouped together to produce the gradient type effect.................................
1440,-7546
guidelines
5300,-10301
Postit1
415,-10371
Postit3
2550,-8401
Postit2
2550,-8545
Postit4
Guidelines
title
ASYM_BeenHere
The ToolBook object hierarchy is designed to allow developers to create full featured Windows applications quickly. Careful thought must be given to each new page and background as you decide where objects should be placed. For example, every ToolBook object can contain a script. Although this makes ToolBook a very flexible and easy-to-use tool, its versatility enables you to make complex applications that can make debugging difficult at times. There are a few simple guidelines to follow in order to exploit ToolBook's design to its fullest.est....... There are a few simple guidelines to follow in order to exploit ToolBook's design to its fullest.
Objects that will appear on multiple pages should go on the background.
Instead of hiding and showing groups of objects on one page use several pages and navigate between them.
Divide the content of your application into single topics so that the information can be shown on one page.
Localize scripts to reduce maintenance and script size.t size.e... the size of the topics such that you could fit the topic on a single page.
1440,-23746
989Q*
989Q*s
95050919535738599103127501459
ASYM_TpID
Taking advantage of the object hierarchy
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
reader
UpdateDisplay
leavePage
EnterPage
reader
1440,-23296
Postit1
5300,-9725
Postit3
415,-9795
Postit2
2550,-7825
Postit4
ASYM_BeenHere
GuideLines (cont.)
Title
Before starting to develop your application, do some simple planning. Decide how you want the book to look in advance to save yourself time and work. Clever use of object properties can result in less OpenScript and a more object-oriented design. The objects at right show two different ways to implement a selection of choices using radio buttons. Switch to Author level and look at the scripts of the radio buttons, the "reset" buttons, and any groups these objects are in (or right click the buttons and press the
button). The example on the left has several scripts while the group on the right has very few scripts.
set" button, and any groups these objects are in. The left example has several scripts while the group on the right has very few scripts.
Note: Think ahead about objects and their properties. Clever use of object properties can result in less OpenScript and a more object-oriented design.
Choice
Fourth
Second
First
Third
three
buttonDown
B"one" =
B"two" =
B"three" =
three
buttonDown
B"one" =
B"three" =
B"four" =
three
buttonDown
B"two" =
B"three" =
B"four" =
three
buttonDown
B"one" =
B"two" =
B"four" =
Three
three
buttonDown
leavePage
B"one" =
B"two" =
B"three" =
B"four" =
notifyAfter
Reset
Individual B
Group
Choice
buttonClick
leavePage
buttonClick
"Choice" =
notifyAfter
Reset
leavePage
2550,-7969
Books, Backgrounds, and
5300,-6701
Postit4
415,-8643
Postit2
2550,-4945
Postit3
2550,-4801
Postit1
Books, Backgrounds, and Pages
Title
ASYM_BeenHere
When writing script you define behavior for an object. If you want to define behavior:
for a set of objects on a page or
background: group the objects and
put the script in the group's script.
for all the objects on the page:
put the script in the page's script.
for all the objects and pages on
the background: put it in the
background's script.
for all the objects in the book: put
the script in the book's script.
To the right are three buttons. Each has a different object script which defines a buttonClick message. However the buttons are grouped together and therefore share common mouseEnter and mouseLeave handlers.
Description
arial
This is a test
leavePage
notifyBefore
= TRUE
buttonClick
= "This
a test"
= "arial"
This is a test
HelpText
mouseEnter
HelpText
mouseLeave
"HelpText" =
Description
buttonClick
buttonClick
K= "Show"
"Description"
K= "Hide"
Show/Hide the field.
popHelpText
cancel
Description
Please enter new text for the text field
buttonClick
buttonClick
("Please enter
"Description" =
Set Text of the Field.
popHelpText
Set Text
Show the field first.
Description
buttonClick
buttonClick
"Description"
"Show the
Set Font of Field.
popHelpText
Change Font
HelpText
Right-click the buttons below and click the
button to view their scripts.
leavePage
415,-6771
1440,-20146
Viewers
2550,-7393
Postit4
415,-9363
Postit2
415,-9219
Postit3
5300,-9149
Postit1
Viewers
title
ASYM_BeenHere
With viewers, it is possible to put scripts higher in the object hierarchy to prevent duplication, which helps keep the application file size down and prevents unnecessary maintenance. Messages sent to a viewer are processed by the viewer first, then by the book. In an application with several similar viewers, all will probably behave similarly. A good example of this is an application with several tool palette viewers. Each viewer has a defaultPosition property. Each time it is opened, it comes up at the same position. However, if you want the tool palette viewer to always appear at its previous position, you can handle the closeWindow notification message. This message can be handled by each viewer making it necessary to update and maintain the same script in each viewer, or you can put a single script in the book.
-- Script in book
to handle closeWindow
if targetWindow <> mainWindow
defaultPosition of targetWindow = \
position of targetWindow
end if
end closeWindow
-- Script in each viewer
to handle closeWindow
defaultPosition of targetWindow = \
position of targetWindow
end closeWindow
The inefficient way:
The efficient way:
1440,-22696
2550,-7249
Visual v. programmatic
1440,-20446
Postit4
2550,-5233
Postit2
2550,-5089
Postit3
415,-7059
Postit1
Visual v. programmatic design
title
ASYM_BeenHere
As with any authoring environment, mistakes made early in development can prove to be the most costly. Before adding any script to your application understand how the object hierarchy works. Place scripts that define general behavior high in the object hierarchy (background, book, system book). To define very specific behavior, place scripts lower in the object hierarchy (buttons, fields, graphics). To the right is an example of a buttonClick handler that defines behavior for all hotwords in this book. It is located in the script of this book.k.k..d in the script of this book. book.k.xample of a buttonclick handler that defines behavior for all hotwords in this book. It is located in the script of this book... behavior for all hotwords in this book. It is located in the script of this book.
--This handler displays the text
--information assigned to an object
to handle buttonClick
if popupText of target <> NULL \
or popTitle of target <> NULL
get popText(popTitle of target, \
popupText of target, \
mousePosition of targetWindow)
end if
forward
end buttonClickkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
This field has no script in it, but it has a property called popupText defined for it. This buttonClick handler displays the text of that property in the window you are viewing right now.
popuptext
5300,-6989
Displaying Objects on
2550,-5377
Postit4
415,-8067
Postit2
415,-7203
Postit3
5300,-7133
Postit1
Displaying Objects
title
ASYM_BeenHere
If you could turn a background and its page on their side you would see that each object on the page or background lies on its own layer from the closest to the page to the farthest from the page. This layer order is reflected in the layer property of an object. Objects in ToolBook are drawn based on their layer property. The layer property of an object is a number. Objects with a high layer number appear on top of objects with lower layer numbers. However, objects with their drawDirect property set to true always appear on top of objects with drawDirect set to false regardless of their layer order. The layer property of objects also determines the tab order of the objects on the page.. on the page.e.....page.
Draw direct objects are drawn directly to the screen. When a draw direct object is updated continuously, it will appear to flicker. You will usually notice this when the draw direct object is being animated.
popupText
Draw Direct Objects
popTitle
Elivators
5184,1008
orgPos
NotDrawDirect
7632,1008
orgPos
NotDrawDirect
7632,1008
orgPos
This field's drawDirect property is set to false
Right
DrawDirect
5760,1008
orgPos
DrawDirect
5760,1008
orgPos
This field's drawDirect property is set to true.
Right
DrawDirect
animateUp
animateDown
NotDrawDirect
buttonClick
buttonClick
animateDown
"DrawDirect"
"NotDrawDirect"
animateUp
flushMessageQueue()
Objects with drawDirect set to true draw much faster than those with drawDirect set to false. Also objects drawn direct appear on top of objects with drawDirect set to false. However, drawDirect objects flash when continuously updated. So, when you need an object to draw fast or appear on top you can set it's drawDirect property to true. Otherwise set the drawDirect property of all objects to false.
popupText
Animate
Bottom Floor
leavePage
1440,-20596
2550,-5233
<!B,e
9$9Q*
9$9Q*
95050919535738599103127501459
ASYM_TpID
ToolBook Draw Objects
title
enterPage
notifyBefore
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
reader
leavePage
EnterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
UpdateDisplay
Managing Palettes
optimized
leavePage
palette
8= NULL
"optimized"
2550,-2641
Postit4
415,-5331
Postit2
5300,-4541
Postit3
1440,-17896
Postit1
Managing Palettes
title
ASYM_BeenHere
Palette flash is a common problem when running Windows in 256 color mode. Palette flash occurs when a graphic display changes color palettes during an attempt to display more than 256 colors at one time. Systems using 256 color video drivers are subject to palette flash because they do not use a fixed color palette. They are capable of displaying only 256 colors at one time but may select from a total palette of 16.7 million colors. Palette flash is not an issue if your system is running in any other color mode than 256 color mode. Set the palette property of the book to resolve all the palette flash issues for a book..
Setting the Book Palette
popTitle
When the palette of the book is set, a one-time palette flash occurs.
popupText
Setting the book palette
popTitle
optimized
buttonClick
leavePage
buttonClick
palette
"optimized"
notifyAfter
= TRUE
Use A Book Pallette
Sunset
Seattle
Display Graphic
ButtonClick
ButtonClick
normalGraphic
"Display
" = bitmap "Seattle"
4" =
unset"
R" =
Change image
Display Graphic
* The example above illustrates one method for handling palette flash on systems using 256 color displays. No palette flash occurs on systems running any other display..ay...
leavePage
2550,-2785
415,-4611
ToolBook properties
1440,-18796
Postit1
415,-5619
Postit3
415,-5475
Postit2
2550,-3505
Postit4
ToolBook properties
title
In object-oriented programming, the concept of encapsulation refers to the idea of associating data and methods with an object. In ToolBook, encapsulation is implemented through properties. There are three types of properties in ToolBook: object properties, system properties, and user properties. Properties belong to objects and define an object's appearance, its behavior, and any other information that makes it unique. For example, even though all fields have a text property, each individual field's text property is different. To the right are examples of object properties in real life. You can apply this same idea to ToolBook objects.cts...ts.cts..s. idea to ToolBook objects...to ToolBook objects....
popTitle
Property Storage
popupText
Each property is stored seperately even though it might have the same value.
Properties of a
1982 Porshe
model
speed
color
owner
Porshe
Fred??e?e?
Properties of a ToolBook Irregular Polygon
fillColor
position
shownw
1080,870
5190,2580
5300,-5405
9"9Q*
9"9Q*
95050919535738599103127501459
ASYM_TpID
Properties
title
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
,&>&{
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
EnterPage
leavePage
reader
leavePage
EnterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
UpdateDisplay
System properties
415,-5331
Postit4
415,-5763
Postit2
1440,-18496
Postit3
2550,-3217
Postit1
System properties
title
ASYM_BeenHere
Each time you run ToolBook it creates a single system object. The ToolBook system maintains system-wide properties such as sysError and sysErrorNumber (error values); sysFontFace and sysFontSize (default font style and size for objects); and sysFillColor and sysStrokeColor (default fill color and stroke color). Changes to system properties are global in scope, affecting many objects in the system. The button to the right will display the Property editor and display properties of the current system. At Author level, choose Property editor from the Tools menu to display the Property editor.tor..rowser..perty Browser.r.hoose Property Browser from the Tools menu to view the Property Browser.
Object of Interest
propBounds
buttonClick
property editor
leavePage
buttonClick
customEdit
propBounds = pageUnitstoScreen(
"rect",
focusWindow =
selectedItem
comboBox "Object
Interest" =
(dropDownItems
notifyBefore
LOCAL wList
= sysOpenWindows
= "property editor"
= TRUE
close
Show Property Browser
leavePage
415,-5187
5300,-5117
Object properties
enterPage
sysReaderRightClick =
Object properties
title
2550,-4081
Postit1
1440,-19396
Postit3
415,-8067
Postit2
415,-6195
Postit4
ASYM_BeenHere
Object properties define how a particular object looks and behaves. The only things that distinguish a button object from a rectangle or field, for example, are its properties. How an individual object's properties are defined, distinguish one object from another of the same type. Object properties include such things as strokeColor; fillColor; uniqueName; name; borderStyle; checked (for buttons); vertices (for most draw objects); and text (for fields, record fields, and combo boxes). Also, each object may have a script property. The example to the right uses a button to illustrate object properties.ies..avior. The example to the right uses a button to illustrate object properties.he right uses a button to illustrate object properties.......
Properties
To view the properties of this object, right click on it and click the properties button.
buttonClick
buttonClick
"To view the
click on
Press
Button propertiesies
Behavior:
Script
Appearance:
Data:
uniqueName
any user-defined propertyy
borderStyle
transparent
caption
highlight
invert
fontFace
fontSize
checked
excludeTab
strokeColor
fillColorrrlColored
415,-6051
5300,-5981
User properties
User properties
title
1440,-19846
Postit1
5300,-6413
Postit3
415,-6483
Postit2
2550,-4513
Postit4
ASYM_BeenHere
The only difference between user properties and any other object property is that they are defined by you rather than by ToolBook. For example each field has a text property. This is a standard property that contains the text of the field. However, you can define a user proprty for the field called popupText. This user property can further differentiate that field from any other. User properties can be viewed and edited from the Property editor as well.ell. and edited from the Property Browser as well. can be viewed and edited from the Property Browser as well.m the Property Browser as well.l.wed and edited from the Property Browser as well.s well.rty Browser as well.and edited from the Property Browser as well.l. Browser as well.er as well.
An example of a user property is the text of the title bar above. The word "Properties" comes from a user property of this background. The value to the right of the colon is found in a user property of this page. Both of these values are retrieved by a book script which displays the caption in the field above.e colon is a userProperty of the current page.....f the current page.
notifyAfter updateDisplay
local oldLock
oldLock = lockScreen of viewer "Tool"
lockScreen of viewer "Tool" = true
in mainWindow
my fontSize = 10
my text = title of this background & space
if title of this page <> NULL
clear last char of my text
my text = my text & ":" && title of this page & space
end
while my textOverFlow < 1 and my fontSize < 16
increment my fontSize by 2
end
while my textOverFlow > 1
decrement my fontSize by 1
end
clear last char of my text
end
lockScreen of viewer "Tool"= oldLock
popupText
Script to display title:
popTitle
Rules of thumb
2550,-3505
Postit4
415,-5475
Postit2
415,-5331
Postit3
5300,-5261
Postit1
Rules of thumb
title
ASYM_BeenHere
When approaching the task of OpenScript design it's best to start with some rules of thumb.
The golden rule of programming is to write as few lines of code as possible. Sometimes code is written in haste, and though the action the code takes is acceptable, the code itself is inefficient. Be sure to go back and debug the code, add comments, and make sure the script is really necessary.
Also, avoid writing scripts for a book that you do not understand. By adding code to a book that you do not understand you have no ability to debug the code and make it better.
optimizing code is a skill that only comes with experience.
Try to make the application as object-oriented as possible. Where possible write generic code that gets its information from user properties.
Debug scripts and try to eliminate unnecessary or redundant lines of script.
Handle or eliminate all error messages: Example
Avoid burying code deeply in nested handlers. Try to avoid code like the following: Example like the following: Examplempleeeefollowing: Examplele
Try to make your code so that it doesn't go very deep in nested handlers. Try avoid code like this: Example
To make your application object-oriented take use the steps we described in Taking advantage of the object-hierarchy.
popupText
sysMediaSuspend = false
mmClose all
sysMediaSuspend = true
popupText
Nesting handlers is the result of writing one handler that calls another. If to many handlers in a row use this technique ToolBook will run out of stack space.
popupText
to handle buttonClick
--Some code here.
send message1
to handle message1
--Some code here
send message2
--some code here.
to handle message2
--Some Code here
send message3
--some code here.
to handle message3
--some code here
popupText
OpenScript rules of thumb
1440,-18496
2550,-3361
9&9Q*
9&9Q*u
95050919535738599103127501459
ASYM_TpID
OpenScript code design
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
2&D&{
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
reader
leavePage
EnterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
UpdateDisplay
Designing for Efficiency
Designing for Efficiency
title
415,-4323
Postit1
2550,-2353
Postit3
415,-5331
Postit2
1440,-17596
Postit4
ASYM_BeenHere
It's important when you go about drawing objects and writing their scripts to keep in mind the performance of the script. There are two ways to make OpenScript faster:
Give it fewer lines of script to run.
Optimize each line of script.
After the script is written you can address speeding up the application. To the right are several ideas for speeding up OpenScript in ToolBook...ook.ook.ook.much faster. After the script is written you can address speeding up the application. To the right are several key ideas for speeding up OpenScript in ToolBook.n. To the right are several key ideas for speeding up OpenScript in ToolBook...olBook.
Use typed variables.
Example
Combine functions into one line of code.
Example
Avoid calling unnecessary functions.
Example
Avoid repeating steps more than once in a single loop.
Example
Avoid duplicating script in both section of an if block.
Example
Minimize the amount of data stored in variables.
Explanation
Explanation
mount of data stored in variables.
Explanation
local l_counter
step l_counter from 1 to 100
request l_counter
Should be written as:
local Int l_ counter
step l_counter from 1 to 100
request l_Counter
popupText
get objects of this page
set objList to it
Should be written as:
set objList to objects of this page
popupText
while itemcount(tempUsers) is not 0
Should be replaced with:
while tempUsers is not null
popupText
local int i
step i from 1 to 100
textLine i of field "test" = i
t = 100
Should be written as:
local int i
step i from 1 to 100
textLine i of field "test" = i
t = 100
popupText
if a < b
c = d
x = y
f = b-a
c = d
x = y
f = a-b
Should be written as:
if a < b
f = b-a
f = a-b
c = d
x = y
popupText
ToolBook offers a large space for variables (16MB). However, the more variables there are the more the system is taxed.
popupText
5300,-4253
2550,-2497
Parameters and system
Parameters and system variables
title
2550,-1057
Postit4
415,-4467
Postit2
415,-2883
Postit3
5300,-2813
Postit1
ASYM_BeenHere
It is better to use parameters rather than system variables when passing data from one handler to another. This adds to the readability of your script and reduces maintenance. To the right is a script that uses a system variable rather than a function parameter and does not clear the system variable when it is completed. A parameter in this case eliminates the need for the system variable. Although this particular example does not represent a significant loss of memory, over time, scripts like this lead to applications that hard to read and maintain. To see how this example can be re-done using parameters, click the button labeled "Example using parameters" button. The new method has fewer lines of script as well.
'to get' vs 'to handle'
popTitle
The to handle and to get handlers both take parameters, but there are syntactical differences in the way these parameters are passed. A 'to get' handler requires that parameters be enclosed in parentheses while regular handlers require a comma-separated list of parameters after the keyword send. For example, get testGet(loc) v. send testHandle loc.
popupText
System variables
popTitle
System variables increase the amount of memory used by your application as they are not cleared until you explicitly clear them (with the clear command) or until the application is closed. Local variables exist for the duration of the handler in which they reside only.
popupText
incorrect
-- Example that uses system variables
-- rather than parameters
to handle buttonClick
system s_name
ask "What is your name?"
if it <> null
s_name = it
request showName()
end
to get showName
system s_name
return "Your name is" && s_name & "."
endddddddddddddddddddddddd
end
correct
leavePage
notifyAfter
-- This example uses a parameter
-- to pass in the year eliminating the
-- need for a system variable
to handle buttonClick
-- system s_name
ask "What is your name?"
if it <> null
-- s_name = it
request showName(it)
end
to get showName pName
-- system s_name
return "Your name is" && pName
enddddddddddddn "Your name is" && pName
end && pName
endName(it)
to get showName pName
-- system s_name
return "Your name is" && pName
enddName pName
-- system s_name
return "Your name is" && pName
to get showName pName
-- system s_name
return "Your name is" && pName
Example using system variables
Example using parameters
Correct
correct
buttonClick
Example using system variables
Correct
leavePage
buttonClick
"Correct" =
"correct"
= "Example
]parameters"
notifyAfter
Example using system variables
What is your name?
oshowName
buttonClick
Your name is
showName
-- This example uses a parameter
pass
the year eliminating
-- need
buttonClick
("What
your
showName(
pName
"Your
" &&
& "."
leavePage
1440,-16096
2550,-913
object references
415,-3891
Postit4
415,-4467
Postit2
1440,-17146
Postit3
2550,-2065
Postit1
Object references
title
ASYM_BeenHere
There are a number of ways to refer to an object in ToolBook. When an object is created, ToolBook assigns an object ID to it. It is this value that is returned when you query the uniqueName of an object. This value cannot be set and will not be duplicated anywhere in the book. When writing scripts do not refer to an object by it's unique name. If you need to refer to a specific object, give it a name. This makes an object portable. If you copy and paste an object, the new object has a different uniqueName than the original, but its name remains the same. There are also many ways to refer to an object indirectly. Indirect object references are a way of referring to objects dynamically. For example, the key word target refers to whatever object receives a message first. To the right are ToolBook properties and functions that are examples of indirect object references.efer to objects in a book.
A unique name includes the object's ID instead of the name you defined for it. Scripts that use object IDs are easily broken. If you decide to delete an object and re-create it, any references to that object's ID will need to be changed. If you copy and paste a page from one book to another, all the object IDs for the objects on the page also change.
popupText
Unique Name
popTitle
In the case of more than one object on the same page with the same name, ToolBook will always select the object with the lowest ID and ignore the other objects. This error can be hard to find.
popupText
Objects with the same name
popTitle
Ways to refer to objects:
Ways to refer to viewers:
All of these keywords are defined with examples in the on-line help file as well as the ToolBook User Manual.
popupText
target
focus
parent
self/my
objectFromPoint()
objects of <object reference>
selection
getObjectList()wwwwwwwwwwww
focusWindow
parentWindow
targetWindow
windowFromPoint()
shownBy
sysOpenWindows
objectFromPoint()
*objects of
<object reference>
*selection
*getObjectList()
selection
getObjectList()wwwwwwwwwwww
windowFromPoint()
*shownBy
*sysOpenWindowsdowFromPoint()
shownBy
sysOpenWindows
* May return a list of object
referencess
2550,-1921
5300,-3821
Shared Scripts
Shared scripts
title
2550,-6385
Postit4
415,-9795
Postit2
415,-8211
Postit3
5300,-8141
Postit1
ASYM_BeenHere
Using the new shared script resource feature in ToolBook 4.0 you can create a script and store it in one location, then assign it to any number of objects in a book to use. If you need to change that script for any reason, it is only necessary to change it once. Proper use of shared scripts makes your application easier to maintain.
Although shared scripts centralize scripts, you should still keep in mind the object hierarchy when designing your application. If you find you are using the same shared script in every other object in your book, you may not be using the most efficient method. To the right is a demonstration of how script resources fit into the object hierarchy. Notice that a single object can have both an object script and a shared script....ell as a shared script.ipt..
littlePause
objScript
resource
buttonClick
buttonClick
"objScript"
littlePause
"resource"
= NULL
Shared Script resource.
resource
--script resource "getName"
to handle buttonClick
request name of self
forward
Object scriptresourcee.
objScript
-- script for irregularPolygon "test"
to handle buttonClick
beep 10
forward
beep 5
Click the green irregular polygon to observe the execution of the scripts..
1440,-21646
2550,-6241
AutoScript (ATS)
buttonClick
HANDLE buttonClick
--{Go
-- --{Go
AutoScript (ATS)
title
415,-8499
Postit4
5300,-8429
Postit2
1440,-21946
Postit3
2550,-6673
Postit1
ASYM_BeenHere
Auto-Scripts (ATS) are a tremendous resource for both obtaining and storing scripts for future use. The ATS library that comes with ToolBook has hundreds of useful scripts aranged by category and message type. There is an Auto-Script editor included with the product (AUTOEDIT.EXE) that you can use as an interface for creating your own ATS files. Click the button to the right to view the ATS dialog box. To bring up the Auto-Script dialog box from the Script editor, choose Insert Auto-Script from the Edit menu, or press Control+I.ontrol+I..l+I.
buttonClick
buttonClick
autoscript
View ATS Dialog
2550,-6529
What are DLLs?
What are DLLs?
title
2550,-4369
Postit4
415,-6339
Postit2
415,-6195
Postit3
5300,-6125
Postit1
ASYM_BeenHere
Windows' main component is an advanced dynamic link library (DLL) system. DLL files are compiled executable code that can be linked to an application at runtime. A DLL provides a set of functions to a program by exporting them to other programs. ToolBook and other Windows applications can link to these DLLs to add functionality they do not have. One advantage of DLLs is that if a program isn't using the DLL, Windows can discard it and free up the memory used by the DLL for other purposes. When the program needs the DLL again, Windows reloads it. it......ows reloads it..indows reloads it.eloads it..it..s it.
For more information on DLLs and how to use them in ToolBook refer to the DLL Tips book, DLLS.TBK, located in the TIPS directory.
popupText
excludeFromTabOrder
= DLLibrary
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
excludeFromTabOrder
DLLs added from OpenScript.
ToolBook's DLLs for the system
The System
The Book
1440,-19396
2550,-4225
95050919535738599103127501459
ASYM_TpID
Using DLLs
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
&&8&{
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
EnterPage
leavePage
reader
UpdateDisplay
leavePage
enterPage
reader
When to use
When to use DLLs
title
2550,-3361
Postit4
415,-6051
Postit2
5300,-5261
Postit3
1440,-18646
Postit1
ASYM_BeenHere
You can use the functions in DLLs to extend ToolBook's capabilities. There are three main reasons to use DLLs:
To add functionality that ToolBook
doesn't have. For example, to get
a list of the files in a directory
(GetFileOnlyList() from
TB40DOS.DLL).
To speed up an operation.
For example, to sort textlines
(SortTextLines() from
TB40DLG.DLL).
To access another program's data
files. For example, to read and
write data to Paradox database
files (TB40PDX.DLL).........PDX.DLL.)
file list
jupdateFileInfo
enterPage
jupdateFileInfo
activateInstance
fileList
getFileOnlyList
uncheckLinks
updateFileInfo
tb40dos.dll
getFileOnlyList
getCurrentDrive
getCurrentDirectory
checkLinks
tb40do.dll
uncheckLinks
notifyAfter
updateFileInfo
"activateInstance
notifyBefore
; path, file
checkLinks
"*.*"
fileList = getFileOnlyList(
N, "", "N")
uncheckLinks
linkDLL systoolBookDirectory & "tb40dos.dll"
STRING
getCurrentDrive()
*getCurrentDirectory(
unlinkDLL
ry & "
file list
tbk_wid_name
1.BMP
2.BMP
3.BMP
4.BMP
5.BMP
BULLET.BMP
DESIGN.TBK
DESIGN10.TBK
DESIGN11.TBK
DESIGN12.TBK
DESIGN2.TBK
DESIGN3.TBK
DESIGN4.TBK
DESIGN5.TBK
DESIGN6.TBK
DESIGN7.TBK
DESIGN8.TBK
DESIGN9.TBK
DLLS2.TBK
DLLS3.TBK
DLLS4.TBK
DLLS5.TBK
DLLS6.TBK
MARK.ICO
OPTIMIZ.PALMB
CRNCYFLD.PX
CRNCYFLD.TBK
CRTTBLE.TBK
DESIGN41.TBK
DESIGN42.TBK
DESIGN43.TBK
DESIGN44.TBK
DISABLE.TBK
DLGS.DLL
DRAWLINE.TBK
DRGLSTFL.TBK
ENBLHTWD.TBK
FINDMDIA.TBK
FINDWIN.TBK
FLDFLT.TBK
FOO.TBK
FOO2.TBK
HSCROLL.TBK
INDEXER.TBK
INTEXT.CNC
INTEXT.CWD
INTEXT.INF
INTEXT.KEY
INTEXT.MAC
INTEXT.OUT
INTEXT.SST
INTEXT.TBK
INTEXT.TXB
LETRUN.TBK
LGSCROL3.TBK
MIDIDEMO.EXE
MNUPDAT.TBK
MOVIE.TBK
MOVNOIDL.TBK
NETWORK.TBK
OBJLIST.TBK
ONOFF.TBK
OVERLAP.TBK
PACKAGE.TBK
POPHELP.TBK
POSVWR.TBK
PRINTBUG.TBK
RESTARRY.TBK
SCRLVWR.TBK
SETCONV.TBK
SETUPMGR.HLP
SETUPNEW.BAK
SETUPNEW.TBK
SFIELD.TBK
SHRTWRLD.AVI
SLCTACT2.TBK
SLCTACTV.TBK
SPLASH.TBK
SRTOHR.TBK
TEMP.ICO
TMPLT3.TBK
TRANSVWR.AVI
TRANSVWR.TBK
TRANVWR.TBK
TUTORIAL.INI
TXTLNCT.DB
TXTLNCT.PX
TXTLNCT.TBK
VIEWER1.TBK
VSCROLL.TBK
WAVVOL.TBK
WIDGETS.ATS
XFER_MTB.TBKET.EXE
MTB40NET.SYM
MTB40RCA.DLL
MTB40RCR.DLL
MTB40RED.DLL
MTB40RED.SYM
MTB40RUN.EXE
MTB40RUN.SYM
MTB40UTL.DLL
MTB40UTL.SYM
MTB40VBX.DLL
MTB40VBX.SYM
MTRK.DLL
OLEM.DLL
PALED40.EXE
PALED40.SYM
PARADOX.ATS
PCDLIB.DLL
PCDXBMP.DLL
PHOTO.DLL
PRINTWND.SBK
PXENGWIN.DLL
RC.DLL
REMOVER.EXE
RULE.DLL
SCRWALK.TBK
SPELL.DLL
SYSINFO.EXE
SYSINFO.SYM
TB40ANM.SBK
TB40DB3.DLL
TB40DB3.SYM
TB40DLG.DLL
TB40DLG.SYM
TB40DOS.DLL
TB40DOS.SYM
TB40HYP.SBK
TB40MM.SBK
TB40PDX.DLL
TB40PDX.SYM
TB40WIN.DLL
TB40WIN.SYM
TBKFX.DLL
TBKMMWID.FON
TBLOAD.EXE
TBLOAD.SYM
UTILS.ATS
WAVEED40.EXE
WAVEED40.SYM
WCBMAPDR.DLL
WCIBTNDR.DLL
WCSTATDR.DLL
WCTABSDR.DLL
WINCOMT.DLL
WINCOMT.SYM
WRAPBAR.DLL
WRKBNCHT.DLL
WRKBNCHT.SYMPF.TBK
STUDENT.EXE
STUDENT.HLP
SYSINFO.EXE
TB30DB3.DLL
TB30DLG.DLL
TB30DOS.DLL
TB30PDX.DLL
TB30WIN.DLL
TB30WIN.TBK
TB30XTR.DLL
TBKDB3.DLL
TBKDLG.DLL
TBKFILE.DLL
TBKSHELF.EXE
TBKWIN.DLL
TBLOAD.EXE
TEMP.TBK
TEST.TBK
THUMB.SBK
UTILS.ATS
VAL.TBK
VEAMAA51.LEX
WAVEED30.EXE
WAVEED30.HLP
WINCOMT.DLL
WINCONST.HLP
WRAPBAR.DLL
WRKBNCHT.DLL
directories
directories
tbk_wid_name
ARNOLD
BAXTON
CONVERT
DEERE
GLEASON
LEWIS
MCLANE
VERNAIL
EXCEL
FLOWCHAR
FOXPROW
IDAPI
INFOMDLR
MAILTMP
MDIABLTZ
MTB30
NECAUDIO
RPTSMITH
SECRETS
SYSINFO
TOOLBOOK
VIPER
WINDOWS
WINFAX
WINWORD
WSCAN
WSCANDAT
MACROHLP
MAKEAPP
MCITEST
MEMORY
MIDIMON
MULTIPAD
MUSCROLL
MYPAL
MYSCRIB
OUTPUT
OWNCOMBO
OWNERB
PALETTE
PENCNTL
PENPAD
PRNTFILE
PROFILER
QWGDEMO
REVERSE
ROTARY
SELECT
SHOWDIB
SHOWGDI
SNOOP
SORTDEMO
SRVRDEMO
TDOSMEM
TIMERS
TOOLHELP
VERSTAMP
WINMEM32
WMFDCODE
XTENSION
LAURELM
HOURIR
BRIANT
CHARLESO
ERIKR
FRANKL
DICKE
BRUCEL
MIYUKIH
JOHNJ
SARAHV
TRANSFER
CHARLES
CHRISC
CHUCKW
CLAUDE
STEVEW
CATHYS
ALLANF
LENORAF
CRAIG
JOHNCO
DANNS
DARLENEM
DAVEH
KEVINB
LINDAA
DAWNM
DEBBIE
INGRIDF
DENNISO
STEVET
GIGIL
DOUGY
TERRYL
WHITEY
SCOTT
MIREIZ
LORIJ
CHARLESC
TAMMYH
AUSTRIA
MITCHELL
SWISS
SAVER
DENNISC
DOUGK
EPOCH
SCOTTM
MIKEF
GER_CPL
ELAINER
MELODY
JOHNGO
SCOTTSC
GREGE
HARRIETL
HARRYS
CSC_TOM
JACKIEV
MIKEN
JEAND
JEFFA
JOELK
JEFFU
JENNIFER
WHITNEYM
JEREANG
DICKH
JANETS
RANDYA
JOHNA
JOHNB
JOHNC
JOHNG
JOHNT
JONES
JORDANS
JOSEPHB
JOSHB
JULIE
KATHERIN
KEITHC
YVETTEB
DIDIERB
LANCE
LAURELC
LISAA
CSC_TAMY
LORIP
WAYNEW
MARCS
MARIEF
BETHR
MARKMA
MARTY
KIKIW
RICKS
BRIANH
MICHAELS
JEFFM
DEBBIEP
MIKEM
MOUSE
NADIMH
NANETTE
NORMS
PAULD
PAULG
PAULM
PHILP
LOGOS
DENNISL
RICKE
MICHELEC
DIANED
ROSSG
ROSSH
CHARLOTT
SCREENS
SHABBIR
LISAM
SARAHH
SHELLEYH
SHERRI
SHIRLEY
SHUANGL
SKUSALES
STEVEB
STEVEBA
STEVEBEC
STEVENW
SUSAND
SUSANM
SUZYS
MARKR
TERONU
TRACEY
TRAINING
TYLERB
SCOTS
WHOWHERE
WINNIE
TONYA
SUSANP
DAVIDS
SYPLUS
JOHND
DALEW
JENNW
JULIEP
BETHH
PRODUCTI
MIKES
MARGOTP
MICHAELO
STEVEC
JANETL
LYNNEP
TYRONEF
MIKEST
KRISTINE
BILLS
SANDYW
GAARL
MIKEP
BRADC
SUSANH
STEPHEN
STEVEF
Drives
Drives
tbk_wid_name
&Directories
D&rives
Fi&les
These widgets use DLL functions to get DOS directory information. information.
updateFileInfo
updateDirectoryInfo
selectFile
updateDirectoryInfo
updateFileInfo
enterPage
activateInstance
2550,-3505
415,-5331
Who is your
415,-4611
Postit4
415,-5907
Postit2
1440,-17896
Postit3
2550,-2785
Postit1
Who is Your Target Audience
title
ASYM_BeenHere
When planning a ToolBook application you must first consider your target audience. Since ToolBook is a Windows tool, many of the ways it works are based on Windows user interface design guidelines.
Building a list of comments about the type of users of the application, such as their education and experience, is key to building a successful application. To the right you will notice several questions you may find useful to ask before starting. The answers may help you avoid design mistakes.kes.kes.gn mistakes in an application.
application.
ation.
an application.
tion.
lication.
pplication.
How will the users use the application?
What information do the users already have available from other sources?
What information does the user need from the application?
What help can the application provide to the users?
What aspects of ToolBook should the users of the application understand before using it?
How should you show any examples?
What tools will the users need to better use the application?
2550,-2641
5300,-4541
9 9Q*
9 9Q*
95050919535738599103127501459
ASYM_TpID
Before You Begin
title
Postit4
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit4
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit4"
720,105
offset
Postit4
3postit4
3Postit4
EnterPage
3Postit4
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit4
= Postit4
textUnderFlow
Forward
Postit2
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit2
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit2"
935,110
offset
Postit2
2postit2
2Postit2
EnterPage
2Postit2
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit2
= Postit2
textUnderFlow
Postit3
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit3
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit3"
745,40
offset
Postit3
%3Postit3
%3postit3
EnterPage
&3Postit3
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit3
= Postit3
textUnderFlow
content text
Postit1
keyUp
enterRecordField
>= ""
VFalse
offset
ButtonStillDown
offset
offset
buttonDown
Postit1
buttonclick
ButtonStillDown
oPosition
buttonclick
J"Postit1"
8&J&{
630,45
offset
Postit1
]2Postit1
]2postit1
EnterPage
^2Postit1
leavePage
keyUp
notifyBefore EnterPage
textoverFlow
postit1
= Postit1
textUnderFlow
EnterPage
leavePage
reader
leavePage
enterPage
reader
notes
EnterPage
notes
UpdateDisplay
notifyAfter EnterPage
MainWindow
notes
enabled
notifyBefore UpdateDisplay
UpdateDisplay
What is the
415,-4611
Postit4
415,-6627
Postit2
1440,-17896
Postit3
2550,-2785
Postit1
What is the Target Machine.
title
ASYM_BeenHere
When designing a Windows application, recognize the need for hardware testing up front. Be sure that throughout the development of the application it is tested on the minimal hardware needed to run it. If the application is an information kiosk that will run on a fast, high-color system with lots of RAM and hard disk space there may not be much to worry about. But if the application is designed for home use where it may run on less powerful machines, the application needs to be tested on computers meeting that minimum.
Do not be suprised by hardware limitations. You can discover them early by testing.ing...ing...
Use the following guidelines to estimate the amount of RAM your application will require:
Approximately 1MB for Windows
Approximately 1.5 MB for Runtime ToolBook
Drawing memory:
64k for current page segment
64k for current background
64K for book segment
Memory used by the system variables
Size of each graphic larger than 2k
This usually means at least 4MB of RAM for applications that don't use multimedia effects. Plan on 8+ MB of RAM for Multimedia ToolBook applications.
256 color : pixel height of the mainWindow * pixel width of the mainWindow * 2(foreground and background) bytes
16 Million Color :
Above * 3.
Remember to calculate the memory used for each open viewer.
popupText
2550,-2641
5300,-4541
What's next?
What's next?
Title
2550,-2785
Postit4
415,-6195
Postit2
5300,-4685
Postit3
1440,-18046
Postit1
You're ready to begin! Keep in mind the following and the application you build can be as good as any you've seen.
Design the application, then code it.
Use the object hierarchy and
ToolBook structure to make a
faster, better application.
Write only the scripts needed to
complete the task.
Approach OpenScript as a tool for
designing behavior for objects.
Use properties to build self-
contained objects.
Build the application for the target
audience and machine.............
ild the application for the target
audience and machine.
Launch
Launch2
Launch3
Launch1
.', #>
V, #>
,&H.&
littlePause
Launch
buttonClick
buttonClick
"Launch"
littlePause
=&(i-1))
2550,-2929
415,-4755
Zm--Z-
G,m-Gmm-m-
mmGGmGm-GG
m-m,G--G-,
,GG,--G<,G
E<,,G<
x?E?""
"*""*
m--mm
G,-,,G,,--
<<,,G,G-,<
,-,<<
-mGGE-
G,G,G,,G
,G-,G,G,
G,--,-,
"*"+?
E<<G<<EE<E
EM__mm
GG,--G,G,G
-,<G<E<E,-
-G,-,,G<
<-,E,
GG,,--GG<G
GE,<,-,,
,G,,<,,<,-
m-,<<
kk?_E
,GG,GG<G
G,,G,G,<G
G,,-E
mG_>>
kk__?
E<E<E<<E
E<E<G,E<
"_?>_EE
_GG_-
mmG_?
k>M_m
-GE?>
>k>k>kk
xkk>>_
ZZ-mEG
>+VP"**
M>MM>>MM>>
F"VV*yz11
EEG,E
"**xx=
="V*1
*""*"x"
"**=V
VV=b6
="**L
PVV+6
+xVV""
G<EG,G,--
x**++
"6VV""V""+
b+==P
++"++66
1**L*6*
8L11**"+
="VP1*
"**"*"*"
L*LL1
881811*V=+
V*P*P*VV""
ZZN--GG
>+""x
Vx*x*V*V*V
1*1*1
1L*1L1
1LL1L1L11L
6+==V*
"x">*V
,-NNZ
N-GGE
1*1*1*1**P
1*LL1L*
P1P1PVV1PP
VPP1P=
V=b66
a6+"VVP
*V*LL118#H
y1Pz=b66au
66++=+6+
6ahFh
""xVVxVV*V
6+="==V
y11y1
P11P1P11P
U1y1O88yU
FF6=11V"xL
HH8$H
"="="
1*P*1PV=b+
yyUyy1U11U
11y1UUyU
U1yy88H
=+6a66=*18
H$H##H
""=""="=+
=b=6h
bb=66
auaau66
uaub3IK'
O#00HHY
HH##H##
==+=+
UU1PzV==b
FFhhH]
]KK]''KK'@
$H$#$X
$X$]X$]
b"=+a6VV="
=++b+
uFFhF
ubbU#
BKK:IIB:BI
="==V
+"++x
b=bb6b6au
uh==6hhFua
abP=hbzVah
bah=XJ
#3dodDD
dd`IdI:K@
]$]$3K3
="=+"==V
x""++
++b+=
zPbhF
hb6FF
a+6=bu
`ddBK@
'$$K$
#H]$$
"">+"
h66zbuh
hu66ha6
44DD4D
DD`IB]@@
]$$3$33K$3
=6hhu
1:o4f5
4f4f44DdIB
]3K$]$33
EE,-E,
hFuFhu
=}4 5
f4`dBK@]]B
X$$X?
GGkM?EmGEm
VLL++
!5fD`IB@@
'@'@@
]]3]K$]$]$
XX$$]
G_>G-GG-Z-
ZZwM_E_G_-
+6=aa6
!!54DdIB
']$K$
#$X$$
G_?_EGm-
Z-Gm-_EmE
--G--w>?_G
_EE-_m>?
+66=++
!!5f4DdIB
3K3K3K3]$]
$XX$H
#$X$]]
m-ZmZ
,-{kM
??GE>
u+b+66bP#
!!55f4DdI
BKB]@@
]::3]$]$$]
$33:X
EM_E,G<,
E{MM_EE?
NN-,-
6ahua
!5ff44D`
K]]BK]
:$$]$$]33K
YHH$$H
>_m--E
?Mk>m-E
E-GZN-<
--N,+
6FN,,
+ahahh1]
D`:B::K]KK
K33K$3$
$33:3J3::J
Z6VxkkE>
EE-+?xkkEm
*V6F"x
Fh66aahhy@
DIBBIBKBKB
]3K33:3:
3:J::
J3JJ3XJX
X$YHH
Z,=U"
_Z?Ekk>?
->E-Ex
`IK:B:BKKB
]K3K]K::3:
3:J}}:J::3
:3:J::J3J:
H#HY$$
w>_-?
NNZN+F<
aah+6a
8Io!2
!!544DD`
IBKKBB::K]
]']]::K33:
}:3JJ:J3
?Z--Z
F6+66aa
u6bzbuuHD4
D`I]KBB:BB
:KB:KK
K::3::
$3$$33:3K3
J:JX3JX
$$Y#Y$
X?-Z-N
?-+**"-
**"+*
6b0#ObYD4
544DD`K@@K
IBKBBKKB
:KK3K:}
]$K$33$##
J:3J:3JXXJ
:XYXH1#$$Y
Xqq_--ZN
-+**L-
+V6+*<
ha+FF6a
6u6bOOUb
!!f4DD`B
B''@IIBB:
}:3:3$$3$
3:J3J:3JXJ
Z-Z-NZN
G--G,
a6UOb
!44`I``IK@
'@KB]@K@''
']]K3
88H33X3:J:
YHYY$YHHY$
}G-ZNN
G,GGm
=0zbY45
!54`:KB`IB
#']KK:}}:$
$3K$#
88#$33
XqXXq
,zyzb6
_>>?_{EGGE
_?_kk>>M>M
M>Mk>G?k
a6=b6a
6bbabOUP
4o:BK]KBB
$K3:J:
8y8##3J
8811L
M>MkMkM_{
_kMM{{mmkM
b"==b==z
!55oIBK@
@KB]@'
##88H
11L181LL
m_M_M{{
WMk__WMM{{
>M>{k~{
?kk>k>E>
=z=zUUz6U8
f4dIKK
KK@''
88H#$XJ}J
Mk__k
UOOUO0$`o
!!55f4oI:K
800#]
$$#y11P
_ZmMMk
MWM>__wwk
wZ?kkM?
UUyOU
80#0##'II
!!55f55
oo}I:K
0#00O0O080
::3$$#8811
PP1yL8$
mm__M_
_Z{W>kM_
mm>M>
'K3B}
dodd}:K
0##080800#
#8#::$##Hy
yH88HHY
*V"V*
_WM>M
_?>_?M
++,--N
,N,FF
]KI}I
ooddI:B]''
800800H
8yy1PPVP
__M_{~M_
~k?-m
mEE-Z-m-,-
,G<,G
]]KI:
ddoddo
}I:]'
##0##0#
*"+""
>k>{k{w{Mk
?k{_m?_{_-
GGE,-,
aa6bz
KKBBII::I}
IdI}oo
ddoodoodI}
##088
11*1188HYH
JXL*V""x
-GmkMmZ?
hhu6b
''KBB
I:}I}
}::BK''
##0##0##
y8HH#88
L11L8L8Y
qqY**""*
-NGm>>--_Z
?_Z-E?
66+66aua6b
bUO00#0#00
KB:BIIB:B
}I:I}
dodoIBK::]
0##00#00HH
**PV*1L
L1L11
YL""*
Zm-mE
,-,G>
MG-mZ{GZG
6++6+6
66b==zPzP
@KIIK:B:I}
}}:I:]
H1L**VP*
1L1L*
-__-?k>
"?E+"
++"xVV6
KBdIB
455f4o
I:dIB'
**"**
x"x""x
6+6+66+
aa6b=zPzz
OUO00#
@'@'@'
ddoo4
f55!5544f4
**Vx*V"xx
"x""xw
<,E-M_-E>
?+*++VVx
+66==VP==
6bU00#X:J
''K`DD
BIIBD4DD4D
Jdo:]]:}
H#HHYY
""><,<
EG>>EG
P*=b=bbz
0#+z0#
4I``'KBB:`
!2!5f5f!2
55!5!
:$$:3X##$
EEM>>
==1P+b=1yP
KB``D5
w~ww~
9W99W
.r.r.
Lb==U08P==
]d4!544
Id``f!
w~~wwW
r9r.r.r.rr
+6U8y8PzzU
0]BdD5544
22T2T
..)r.r.r
rr.r.).r?
+"==*
1881bU8O#0
UOzb0
44DD45
T2T2T2T22T
!5!5f
{W{W{W{~~
..9.r.r.)r
)./.)9.).
""++*
|Y=6z8y
881PUUyO0
UO0#Bd
dI}Id52T22
T2T2T2T
!5!!5f4!
:JXJ3
ww~{WW{W
99.9..
..)..).
).r).)).
">"V=+
=+PP88y
B:IB'
99W99W9W9.
r).).
+V""*
=bPU#0
}o44dJ}:3
q||pp
9.)..).)
x"++"
LLYz=
L8UOO88OyU
::`DfDD
`D45ff445!
!5!5o
qq|pp
x""+"
""x"x>+x
PP1HP=
080O0O88UU
##$$K3
]:BKB:dd44
9.9.9..99r
P*YPzUUO08
OOy08
8O800##0
BIIo5odo
3:JJ:J
M>w{{k
+x*V*
*P*P1YP=zU
88UyyU88O8
0O08$00##
$3K33
ff5!!
)9gr.
>>{>>kMw
0H#008
$3$:3:J:J
::J:3KK]K'
KI:o5o:
3:33:$$
>>?Mk
xx"xx"x
Y1PUH
33J:3::
{kkww
L1L1PP8UP
LPP88y
UPzUU
08OO$##$
#0#$J0
.9.)9n
{{>{w
OO80O0$$
JJ}J}[}JJ
5f!o3#
HH8H8$H
*=1yyP
zUO88O008
w{w~w~
1VPy8
UU0O808OO
3JJ}JJ}
"zPz1PUU8
O0033$$
q[jqq
{W{W{
yzUyO
33JJ[
q[q80
{WWwWW
YP**1
UU0O0H00$
q[qjq
OUO^v
w~~W~W~9MW
1PPyPUU
y0O#0O#
jqjqJ#O
[Y8081
UyOO0
#3]']
99WW9W~
H08$0$Y
[[j[^jj
H$$@@'$
Pz80OH
j[qjq
}IdD:$
'@@''@@
.W.W9W.
9r.rggQ
zyOO0
[[jj^
d:K@KK]K
'@'']
gg)/
9WW~W
r))rr
dD4Dd@'@
QgS)/
8V*1y
8H#8833
j[[jq^
).).)
SS))r*+==V
j[jj[
9r)9.).)
gx6"V
dBB@'
..rr9
iiQiQ//
|L6=80#8
#0''#
)Q))>
+bH8$
|pJ3Y
''#pp
QQgiiQ//%
/A.9i
iQi//
+yO#H
QAiQiQ
^^j^^
lieQQiiQiQ
nrg)9.
^^j^j
@'@@''#
iigg/Q
S)/)/AAQi/
Q/QA//%%
tj^^t^
qK@]B@@'
IB@'8
/A/A/
SS))/%
d:K]@'@'@B
BIIB]
%r6uhu
55fDD
]II`BB
9rrg))%)
D`4}K
'K`IBII
UUY0p
4`D4`]@KKI
^t^^j
`I``}DD
((Cr)
Sbbaa
55!!54
4DD4D`
rn%)uz
D`d:IJ
DIBId}
55ff4
D`IBIDq
nS).))%
!5544f
DDIBBIId
D`DIB@:}[
55D``
|R99nS
[J3[p
!!55f
`IBIJ
)S).)
$33$J3#3dY
!!f54
4`BB[
"P1*8
0yU##
DD`D4D`DD`
!4`4DD4D`
KKD4DI`DB`
[~rnSS9)S/
4IID44DI`I
B`44B]IID[
rr9)S
/)%))%
2T22!DBI44
D``DII`D`@
9rS9g
v2T2T2!`B
I4DDf44``I
rg9SnS
;/)%;%)/)%
#33py=hY
vT2T2T!I@B
`DD44D44D
rgS9S
v2T2T25
BBIDIBBIBB
%)%/%
K1H0H
`B@BD4D`B
@@`I@
99SgSS
/)%)%/%%
+zy1]0U
bK`f4
vT2T2D]
B]BD`BI
`B@BDI}
/))%/)%;/%
!2TT2
`@@'@IB
`B@@]D
//)//))%%/
%/;;%;
`DDBBD
/));)/%/A
]]D5Dd
;)/%/;)/;%
le\ll
T25`@''
BB@BDD[
SgSS/)/))/
;%;%;
2T5`B@@B
BI@@ID
);//;%;;
\l\eell
B]@@BB@dJ
ggSggS
)/\)/;/%
2T2`BII
ggQg/SS
//)//)%/;%
T25``D
B@'@IBBD
gSgSS
//));;)/%/
%%;%/
( ((
el\\lei
2!f44`@@B`
B@'K`4f
ggSgS/S//)
;/)%%;%%
f54I]BIB
'@BDD
));))/%/;
SS/S/)/;/;
24IDf4
II``BB@@`4
gQgQggSQ
/S/););)
!2fD4
4D44D
@`44D
Df5f5fDIIB
ID44D
OO0O$0
54D4RgQggQ
Q//A\eA/
22!DD4D
4D`ID54554
DftggQQ/S
#OO0J
TT2DBB
`BI`B`445!
'BIB@BD
/A//;;A;
0]B@BID!!5
S/AA/A;
0#KIIDD
O0:ID'
vT24`'
A//AA
U1yHH
00@K`DI
!T24I@
@'I4`ID!!
A/A/;/;;\
(\/R[
2T25`
44DD5!!
iiQAQQ/A/;
f4f55f
eeiQQAQA//
qb8}3O
iiQAAQAA/
eQeiAQAQA
00UzU
2TT225ID4
\Aeel
!TT2TT4
@@BI!
;Aee;;
TT24'@B`
QQiQAQ/;;
;;Qe;A
2T2D@@ID2T
iiAQQ/A;)/
4]@I522
iiQQ/A//A;
\e\le
2T2T2!``
422TT!
QQAQA/
2TT25
TT4`!22TT2
eiiA//;;%;
25D4!T2T2f
eAile
TT2T5`D5
T2TT5BI4!2
2B]I!
lQAA;
llelQ
/A%;%;
4'K2T2T55
rC%%)A)%)
;;AA;
T2T2$$22T2
/QC%%;;
);;/;QAe
OrC%%
)g%C;%
%%C;;)
%%;C/
44!!55
e/%%)%C;
C%C/C;
``f5ff
& &&
CC%%C%%)/)
SSnR2T
S/CC%
C%C)CCSCS.
nS))%%
%%C/CSC)g
;CCS)n
g/SC%C
&&
gQQ/C
&& &&
/sln)S
66P8#}
gS/)CC
& & && &
((
22f[[
& &
& &
C(CCnA2\nQ
52f55
w??Em,
mm-~l
ir~~rig
EMQQe
gQQ\Q.
9QQ)Sl
rr/QA9S\S.
eA/Sn
\\SA\)
QAS/nS
\/S9.)
\gS..
Sn9.)
S.Sn)
Sn.n.
\.n..
h"o&&EE
ABfpA<sn
j j;*
b"b?S
~~`n:AA<
A~AA<::fC
;UUoUbS
ExEbS)@
fBpB~fAB-/
*UUo *;N
i]i}!
PI$q99
gW:~ABB::
ooU&bxE
IIqPPm=F`
FCFF::M
C4f4f~p
b&U*U;UU
xbbEESEES)
$<xU>
D99qq
00-C0M
44-0--4BK<
U*;3j
o&bx&ob
&bEES
%116is]
C40-4MBfA:
oEbobo
SESEES
XKp--
%%(1]i]s
&6*;6;j
XKKB0
%(N3i
fBfA<n
<Q??&"*U*;
bo&&obo
&bbSS
%N,1i
-44ppB:A
n<SE?&""hU
XXKp-
^WRC9
00-4-M~
"U*;6,(
ob&bEES
4BBAX
?&x&"hU3
(O, +>
Ebo&b
00-4fB~AA
E?&&""
**63j, ++>
004B~~A:
x?&"s*6
;3, O+>
0--C-
MBf~A:X
&""h6;3,
p-00-
%%N1]^
m-f44M4gA:
??""h
*63, +(>
)@@)@
%%N1t
:n<nQ
**3j, +>(
$-<&j
%(%N1
^aWR=9
-m-MffgA:
<QG&""*63
Cm4~fg:nn<
<Q??&"h*;3
j,O+O>
%%((1ti
//M``
g:<<Q
U**3, OO+(
%%ON1
/CMF`g:
<<G&&oh*
*63,, (>(
BnUj >
0m=`gA:
QQx&""UU6;
;3,,O (
KKBp0
AXKKBKBp
n<QGx
oU;;j,
00-pKK
0-BSh
jj*Uj
N ,O((
%(N11
MgAW<<
&""oU*3,,
,, O+(>
0-XbU
;;**;;O
O , , %
PPFCM
**;j6;*
nSQQG
hU*;;
*U**;;**+
gWWn<
hhU**;;j,
++((
XAAB-
044B<
xohs"h*h"*
>(++O1
j3366N%
`g:n<nSQxx
&&"Uh
C~fpA
SxxEx&"&Ex
>>( O ,,
36;*3O%%
mm`gW
G?&&""hUhU
U;j,,
-pBAA
+N ,366*h6
, (%y
FFg:W<
x&&"h"oUU*
~AfB/
))SSx"*
(+ 3
]s611NO(%
(+ 1,6*"
s""]3
&&"*;
, +>>
Bpfp44
-4p-0pX
))S&6O
(O 3*]
&G"ii31
PmM`g:W:<
&**;*3j,
++>>
A~Bf4--0C-
%O,6ssG
0Mfg:Wnn<
;3j, O+>
KB4--0
%O1*s??Q
`W:W:n
E?"hh**;j,
~~-4-0
0-44-00B
(13]"?
n~4M:c^^}
PF`gA
:WW:nQ
U**;j,O((
BB4C0
044-404
@S* (
(,13sx
:B04gW
dqID\
=M`gW:W
QQS<<
"hhU*3, OO
Bf4//
/CM4--p
%(16]]G
cgM``
9PP/`g
gW<a<
&"s"o**;,
,, +>>
%O36]]G
:g`CFRF
Q<<?&
?"&&"h**6;
*;3, ++
36]ic<:g~M
/C/99I
mC`gWa
h**6;j, ++
4BKKG3(
::gMm
sU*3j3, +>
++ ++>
((1,3]]i
#9qPm
s*6**3,,
]i}^a
x""G""]*
33jj, +
%(O1]
??&GG&GG&x
G"s"h*;j3j
//==/4=
Q"] (
=CFg:a
""&?&??G
6;3;, >(
/I//=
&G?GQaAM=C
FF``W
63 O(
cP==/=
1ti^^a
G&"sh
Pm`W&h**
h6,O+(
1t^CP=
/=FMFf`~M
/~AAK:
OO %
3 +(
M``~FM
p4f<]
331 O (+(
GG"hh6
G661O(
=P=C=FF``F
MGh6;63,3,
%%O11t
GG"s*
3,NOO (%
P==FC=I/
"shi*63
`FFmP
,1,"=
63,,1
DII=I
&GGhii6
31,1
^aWgR==F
3,3}m
]aRPII
DD9II9D9
66*61OO(%%
^]66i
16i^^
9PFmFR=
i^"i"
=RF`ccm
##9qm
veI#\
V#5Z\
R=I=I
=RWi%
7zvld
LT#VL
HdPq5#
h6 (%
4Ans1,
0~nQh N
/B~:<
q#VV#
lvldedl
ldHeeIDD
/f::Q
ddH5#V
/M`:QG
T#5[T
=CA<G?]1
THZTV
VTT#TV
?"6N
eHeH5##
TV\T55TT5
__|YY
weHH5
H5VVTHHTT
deH55[
5eHT#
YkJ8877
|__|YYkJ
9=Mgc
8J887..''u
J887.7..
__|YY
#55#T
kJJ88
HH5HH
k|Y||_z
V_|YYkY
''.y.
7JJkJ|
'.u..y
7788YV
uu.'.u
''u'u
HTH5J
e5lvy
\77%7%%
KK$>KK
K$$K$K$$
\77%7
$$KK$$
$$KK$$K$$K
$K$KK
$$K$$KK$K$
##1##
%,%J%3
$K$K$$
R11#R
%XXNN%
NN,%7
1#R#R
1R1R#R#
ZN,,%
J%,,%JZZ
%J%,%,%JJ%
,J%%,J%
X`XXo
N$~o=3E
JN%JN%,,%J
JZZJ,
Z,%%7,
%,,J77
oXwXNN
%N=3=X
;&&o%
=3==3==~X%
hffZh,
,J7,,7,7,
7%,%%
=='\\'
=3&==
;;#;;#;
E&3&E&3
%=%3=No
X$* )
&==&=3
Y> ))$$
*>$* 8 )
$X) 8
7M77M,
E&&E&
M.M..MM.
MM7.M7
J,f,h
NNJJ,,%%
&3E&&3
L$KK$$K$$0
0) )MM
,,NNJJZZNZ
XNZNNJ,,
N%,%%
&33&3&
%%&3==3=
) L L *
..7M7
N,,JJNZ
~$0 4
3==3%=%%
3&33&3=3=
= LL-
X ,O0
,JJ%JJN
%%o%%=
&&3&=3=%
=%%=%
=%=%%=%%
o%NN~NNo%%
~$) 0
woNKK0)--
~07O0L
%,,J%%,%
o%%NN%oNoN
NoNoN~XNN
o~N~N~oo
==XX` 0w
XKK$K))>
)0)0h..7.
7%JZ%J
3%=3=%=%=%
=3%3%
oXXNN
> )>wNN$K$
w*YX>
XNw'10
0) )44M.."
`00404
``00m>>
>m>)mm)mm
4)m)m)m))m
)>m)m>
~$$>
0)4)m..
".\.7M7
j|0m0m4 )
%=%=%
ooNXZoo
Z%0,1`$`0
.."."..
""\..7MJ
7Mhhf
A )4 ))
kakkak
XN`0XwNNo~
)X 88
NZXX0
0||A
40 )0..""
.\..MJ
m440 A
*-->X
%==o~Xo
X~XKX>0wZ=
%=&~&3X
w>- )
,0 4A`,
j|j||0
)4044)*)
tkkaka
$XNZXw
ZwZZX,,ZZw
))*>aY-*y
5??6{O7NN
\.".\"\""\
m|mA)4
)) **y
)-)-**)*-)
*)-)-**--
88L $
L ) )
L 0) 0 )|
)*``
*)-*->
N%Z)Z
+((+{
00)0)0)0
.""\".\
7&JfMhhffj
||m)04
`00)`%'
,Z`00--
88 >
)40)0AA0 L
)>>-w
(++((
j00A00A0
LA."
."."\.77hf
Mhhff
0|044>)) )
0 0m04
04 04*-
A)A 4
|00|0|O1U
40>w>,>
*y>|0wgg J
hA A0400
Mfhff
0|4) 4--Y
m0)L4)*
) 0 0440|
0)0`X>`>
++((+6
0AALLA`AA
A.""2
0mm4A4)HH
8`> )
4404004``0
|4LhR
U7w7Z`ZZwX
,4RfL
44))4>
>--)0N0) A
L L L L L
)-HH
X>),OhZ
7 L0O
\'U71gg
Z)Z*-
:""2"2
.".""
0mm0m)>->
)0w00
L L L
L8LL*>yya
gJzzg
J Lfg'1O1O
g%1'`
Iq_DIb
:""2"2
.\"."
|>4)44
A LL L
* 8HyH
#J 4"O7,
|``|4)4
4)>->-40`>
3N*FTFTF
*-aFH
)|| B
ZJ'BO{6
ri_Db
:""2"22
>-40`$0
A L
BccBU1'
:e:22
hhfhf
`4)44m->--
)0w`>) ) L
>*FTF
qD;) A
BQcQBBcB
cB1O1
Z''VO{
.".M.MMhM
>4))m4>
00K` )A
8 8L88*8
L-kak
'gQQccQc
BB1O1
iiqiiqq
e:ee:
"22"22
`Xwm)44m-
->))0`
)LL8L*
TH>>8**
--*-Ha
UO17)4)0Z
"2"22
|``0>4) )
*--8L-
kHYakk
>|\1U
hVcgccQcBc
1OU7m4)400
rii_I5
2<<"22"
mm>)m4)>>*
>--*0`
cVBcc`M
cQcQcBcB
hU'6
>4 wa)-
X) )L
)88LL
YLL-kaka
tYtHyyY
*>0 |
fZf`f
cBQBQcB
Z4*|,%[
ffJZZXwm))
a$*>4-)00X
K`) )) 0
akY-H-Hyt
gOgcBQQ
&,1U1OccJ
ri__D5
::e::
<22<2
)--)*4`KX
) %L**L
y>-yH
_@!!Q
g1Ugg#
ri_D!
MMh,hfJJZ
w>4*>--m--
>`~~=) ,>
L8FFH
cBgO1
gcgz5
22<2"
MM7hf,JZN
>m)*-
))wXK
k*L-kak
QQIbQ
__II!
r_nqn!
<2<22"22
.."..MMhff
JZNZX>4)
` g))
L8HHFHt
kYL-a
ddDIQQbbII
V171c#c#g&
rnrn@!
2<<22
M7f,JJZNZ
>*>)-*>
8*FtH
yY*-aka
,,Ogz#1gg
++((?+}
MMh,JJNNZ
>)*-))4
$~K#XwV0>,
--yat
dd_DI
II5bb
cgg'#
G:GS <
..M.hh,%JN
>) 4)>--
*)`~X;%
>*)Hk
ndndd_DDIb
Bg1O#
rnnrPP
GG::G
Mhh,JJ7
4)4m-4
0~K;%g
ttH-y
aa-YY-
_DDIIb
_i_d_D!!
++]+(
"2".".7.M
4) >*-
)-*)>~
BVBBcc
c1R%cQx5
5VQI!!d_
5!__bDI
+]]++
2<2"2
)-)* 0
k$zcI
I!b55
ccBQBxgwgB
d_ID5
+]]+{
<S<<2
..Mhh
- )0N
ccQBcB
<pSS<<2<S<
.\7.Mh,,N
*))$>%X
&;xX*--
=~-w#
Dd_D!5
GeSpS<
S<<S22
22"2""
S<"<<p2S
\"..M.7,
w0ZJZ
,*8**
wX` O
99Gpp2p.
."p"2p22<2
-4m>*
TtYY->->
pp.pp
.\7\7.
8**88
>->--~V
p<eSS
2<2"2"
HttH
??(66
:e<p..2<2p
HHFHHFF
(6(?6
G/9G99
"22""
(]]+]
SeSeS
pp2p2p"
*--HY
/99/epSe:
:<22""
!rWP@!
99/epeSe:
--HTt
@P@!!
/:ee::
eSSeS:S
HHFHHT
/epS:S::eS
FFTytyTtF
S:eS2"."
FFHTT
dd!!55
+}99//
dq@D!!
??655
(+]}9/
pe:e::e
UO11#
~`|f)**
FFTtHk
WW@!!@@
PP@!@
_nqP@DD
+]+(}
nqPPWq@
W!@@![
|s *8*
qPDD5
4j| 8**
rr!!@d
|j
@[ >;_
5ddnn
e<.RU
!!P@@P
P@!!@
5dqqd_b
b__rrnP
P@@!!
9:Gp7
PWPPW
@dd_I
bDDnr
D5IIQ5b5
YyX*88 4
PWPP@!d
nndd@D!!
QzID!
UOOU'
q!@!!
_qq[I
_ddD5!
5bQ5?(
zqd!5
(]+]+
/:9G:/
RR\MU
Jj|-y>8L
;*44
WPWWP@@!
iinq_q_II
qn_ddD!5
5bIQ?(?Qz
q[__DI
40|',z
WWP@!
rirrnqdd
iiqqz!5
6?]]v
Pq@@n
*|j488*Hyy
>04A4
JX[PW
DIIb5I
__DD55
[[_Ib6?
Xjj4*
@P@!!
zIb5QI
rr_nn__DDb
!!PWW
@D!5[
>4>4w%
!rWPP@!
dDbb5
_iirinn__
!!bDQz
WrWPn-
Db5x~
!rW@!!
i[qi[
__d__
VIIbI
BB5Qz
[ii_D_dd_
@PWWPWW
!n@!!
iq_q_DDdD
!P@!PPW
jm84*
VQIcI
BQzxxc[xi
__!b5Dd
!P@!@P@@WP
`j>*-
O6VB5
b5bIIxx[x
DPP@!!@!!d
-* 84
zDz%3
??6?((
!!D!~
Ofjm*
RA AL
6+fAe
ggzz[[q_!
66(hA
66}G/
9:2RR
VVQQI
UALA^R
6?+hA
q[[ccQQDzD
xxq!5
j| 88L8
?{V6R
VBQczz[[
(66?+
LR{6+
[[qq[qx
xxzb5
ghsm 8
psL^L
MOv((6
9SRR#
<A^^L
6??6{6(+
(]U*8m
h..sA
v{{6+
(++(+
vv6v{6
6?vv6v6+
"'1zzI55
(++]+
sm 88*
AAsAs
v6v6v6v]
|A4 8*
(]+]++
smm8 *4
((+]++]+
sjjA
sAA 8
<2SS:
(6+6?
ss L
ccV??
(++]+
j4As|^
L8 4*4jp
(]]++]vMj
jsj 8**
5V5!!
s 8488m
j^jj 84
?++((
<2.{(++(9
A^AL44jj
s^ A84
Ajs A48*4
88448
88*44
ss 84
sAsAL84
AL8 m
L L 4 j\
s48^s
jL^sA
lL^88
^^AA*H<
^L4L^8A4
LA^LAAs4
8A^8A^^
lA44Am^s
Am44A8A
44A^j
s^AA^
TmpltTool
Title Page
title
ASYM_BeenHere
V, #>
A AlreadySized
updateDisplay
A AlreadySized
leavePage
notifyafter updateDisplay
4AlreadySized
Zxsize,ysize
xSize =
/- (1440/10)
l&","&
oPosition = 1440/20&","&1440/20
removeBookMark
i#gotoBookMark
ButtonClick
ButtonClick
gotoBookMark
Go to Book Mark
popHelpText
addBookMark
&eBookMark
buttonClick
1, "@
nomark
bookMarks
updateDisplay
buttonClick
BookMark
notifyAfter updateDisplay
bookMarks
onormalGraphic = icon "mark"
#on "nomark"
Add Book Mark
popHelpText
8notePad
buttonClick
buttonClick
notePad
Note Pad
popHelpText
w, #?
title
updateDisplay
notifyAfter updateDisplay
ZoldLock
= lockScreen
J" =
= title
<> NULL
& ":" &&
otextoverFlow < 1
Table of Contents f the object hierarchy: Books, Backgrounds, and Pages
(postit
buttonClick
buttonClick
postit
Post Notes
pophelpText
Table of Contents
buttonClick
buttonClick
MainWindow
"Table
Contents"
Table of Contents
popHelpText
updateDisplay
leavePage
95050919534438586212124501368
ASYM_TpID
TutorialList
ASYM_BeenHere
out,sculpted
ThreeDeeRect
TutorialList
tempFileinfo
tutorialList
TutorialList
getInivar
tutorial.ini
enterpage
notifyBefore
4tutorialList[][]
counter
Ztempfile
tempFileinfo = getInivar("TutorialList",
D,path
h.ini")
ctempFileInfo <> ""
W) = 2
][1] =
][2] =
dimensions(
i][1] &CRLF
--Clear off the extra
bottomLine
topLine
Rebuild
tutorialList
&Cancel
&Rebuild
TutorialList
I can't find the tutorial book
File Not Found
buttonClick
buttonClick
4tutorialList[][]
selectedTextLines
"TutorialList"
8(path
][2])
c"File Not Found"
][2])
"I can't find the
f"&Cancel"
"&Rebuild"
isOpen
close
&Go To
Cancel
TutorialList
buttonClick
buttonClick
isOpen
"TutorialList"
close
&Cancel
Rebuild
buttonClick
buttonClick
&Rebuild
enterpage
PopText
95050919593838940058139359890
ASYM_TpID
Notepad
ASYM_BeenHere
out,sculpted
ThreeDeeRect
Notes
Notes
Notepad
notes
enterPage
keyChar
NotifyBefore
MainWindow
"Notes"
"Notepad" = notes
key,isShift,isCtrl
keyEnter
buttonClick
bottomLine
topLine
Notes
notes
Notepad
PupdateDisplay
buttonClick
buttonClick
MainWindow
notes
"Notes"
"Notepad"
updateDisplay
isOpen
close
&Save
Cancel
Notepad
buttonClick
buttonClick
isOpen
"Notepad"
close
&Cancel
Reset
Notes
Notepad
notes
buttonClick
buttonClick
MainWindow
"Notes"
"Notepad" = notes
&Reset
enterPage
Notepad
9505091959443894531416471984
ASYM_TpID
PopHelp
ASYM_BeenHere
ShowText
1,"JdY
1,"J2Y
updateDisplay
notifybefore updateDisplay
= 1440/14 *
)-1,1440/5
otextoverFlow > 10
Table of Contentsld.d.a page or background that indicates how much of the 64K boundary is available for content.
updateDisplay
95050919570338784412823287292
ASYM_TpID
badPage
ASYM_BeenHere
81 %s
folder
mytabheight
myNumTabs
myTabMode
myTabSpace
tbk_wid_name
numTabs
tabHeight
tabMode
tabSpace
tbk_wid_props
tbk_wid_values
obtype
tabHighlight
tabLabel
bigField
buttonClick
buttonClick
"bigField" = 13
obtype
tabHighlight
tabLabel
bigField
buttonClick
enterPage
buttonClick
"bigField" = 0
notifyBefore
highlight
bigField
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
enterPage
95052310361523173034338175
ASYM_TpID
Click The Objects To Get More Information
statusText
BackDrop
lockedinplace
Page:
PercentFreeSpace
enterPage
notifyAfter
) = percentFreeSpace
&& "%"
enterPage
notifyAfter
) = percentFreeSpace
/&& "%"
Background:
intro
field "good"
buttonClick
buttonClick
= TRUE
close
isObject("
""good""")
"bad"
"intro"
Close
lockedinplace
UJcounter
VJcounter
buttonClick
buttonClick
ZtotalCount, currentCount
= 10
= counter
("bmp" &
M = 1
counter
right
graphics
bmp10
DFDtDDO
enterPage
goodPage1
ASYM_BeenHere
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
This is a full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
9505232107482520001313380340
ASYM_TpID
folder
mytabheight
myNumTabs
myTabMode
myTabSpace
tbk_wid_name
numTabs
tabHeight
tabMode
tabSpace
tbk_wid_props
tbk_wid_values
obtype
tabHighlight
tabLabel
goodPage2
buttonClick
buttonClick
"goodPage2"
obtype
tabHighlight
tabLabel
goodPage1
buttonClick
buttonClick
"goodPage1"
highlight
lockedinplace
UJcounter
VJcounter
pictureWindow
buttonClick
buttonClick
ZtotalCount, currentCount
= 10
= counter
5 = 1
normalGraphic
B"pictureWindow"
/= bitmap ("bmp" &
counter
right
pictureWindow
intro
field "good"
buttonClick
buttonClick
= TRUE
close
isObject("
""good""")
"intro"
Close
Page:
PercentFreeSpace
enterPage
notifyAfter
) = percentFreeSpace
&& "%"
enterPage
notifyAfter
) = percentFreeSpace
/&& "%"
Background:
enterPage
goodPage2
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text.
Another Full page of text... is a full page of text.